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 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示