allen5211985 2019-11-05 02:41 采纳率: 66.7%
浏览 464
已采纳

想写一段代码,提取出表格第二列的省份或者地市名称,并取结果的倒数第二个放在‘归属’这一列

我有一个EXCEL表格,想写一段代码,提取第二列中每一行文本中出现的省份、地市名称,并把提取出来的内容中倒数第二个名称放在最后一列。
原始的文档是图一这种,图二是想实现的情况图片说明图片说明

我本来是用下面这种方式提取的,但是提取出来以后没办法进一步细分,麻烦大神帮忙想想办法。
quxian_name2 = '山东|青岛|济南'
def re_1(i):
res=re.findall(guishu_name2,i)
return res
####‘文本’是第二列的列名,图片忘记添加
alljob['归属'] = alljob.apply(lambda x: re_1(x['文本']), axis = 1)

  • 写回答

1条回答 默认 最新

  • weixin_41992909 2019-11-05 10:27
    关注

    首先你需要把Excel载入到python,
    因为你没有原始的dataframe
    所以我随便做了一个

    按行进行正则表达式

    如果返回的匹配结果大于1个(2,3,4。。。)
    则返回倒数第二个[-1]
    如果返回结果小于等于1个(0,1)
    则返回“没有归属”
    最后append所有行的结果
    并赋值给‘归属’列

    #%%
    import pandas as pd
    import re
    
    #%%
    
    df = pd.DataFrame()
    #%%
    
    df['B'] = ["山东省,中国23个省之一,简称鲁,省会济南。",\
    "位于中国东部沿海北纬34°22.9′-38°24.01′,",\
    "东经114°47.5′-122°42.3′之间,自北而南与",\
    "河北、河南、安徽、江苏4省接壤。"]
    df['归属']=0
    #%%
    
    pat = r'山东|济南|河北|河南|安徽|江苏'
    
    guishuall = []
    
    for i in df.index:
        text = df.loc[i,'B']
        guishu = re.findall(pat,text)
        if len(guishu) > 1:
    
            guishuall.append(guishu[-1])
        else:
            guishuall.append('没有归属')
        print(guishuall)
    
    df['归属'] = guishuall
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器