超哥超级爱学习 发表于 2020-8-24 12:24:34

如何用python自动补充excel表格中的文字

本帖最后由 超哥超级爱学习 于 2020-8-25 21:04 编辑

求各位大神帮忙
      因为工作的原因,需要对excel表格中的地址进行修改,主要问题是地址需要标准格式比如:XX省XX市XX县但是提供的地址经常XX省或者XX市缺失,我想做一个小程序能自动帮我修改,求大神提供思路或者方法啊。
  我现在能想到的是我先做一个标准数据库,包含所有的XX省XX市,然后和表格对比,不一致,然后再自动添加进去。
ps:这是原来的excel表格的文字样式和修改过的excel表格中的文字样式
   我看了看还是没有思路,下面几位朋友提到了openpyxl,我还是不知道该如何用这个库。{:10_266:} {:10_266:} {:10_266:}
ps:新增了一个地址库,一个原始表格的样板。求各位大神继续帮忙啊{:10_250:}

qiuyouzhi 发表于 2020-8-24 12:32:45

直接用openpyxl呗

疾风怪盗 发表于 2020-8-24 12:53:48

思路没问题吧,要双循环,就是如果你文件大,这样循环时间就长了,可以用pandas,先循环省市列表中县一列,去isin()找,找到了再拼接,应该会好一点
我做过一个识别扫描图片内容,根据抬头,自动重命名文件的,类似

超哥超级爱学习 发表于 2020-8-24 14:29:49

qiuyouzhi 发表于 2020-8-24 12:32
直接用openpyxl呗

不知道该如何下手{:10_266:}{:10_266:}

超哥超级爱学习 发表于 2020-8-24 14:30:35

疾风怪盗 发表于 2020-8-24 12:53
思路没问题吧,要双循环,就是如果你文件大,这样循环时间就长了,可以用pandas,先循环省市列表中县一列, ...

我试试看,不知道如何用pandas{:10_266:}{:10_266:}{:10_266:}

yhhpf 发表于 2020-8-24 15:49:03

openpyxl就可以了,循环嵌套就好。基表上弄3分数据,第一个是省单独一列,第二个是省+市列,第三个是省+市+区,可以减少循环次数。

超哥超级爱学习 发表于 2020-8-24 19:18:40

yhhpf 发表于 2020-8-24 15:49
openpyxl就可以了,循环嵌套就好。基表上弄3分数据,第一个是省单独一列,第二个是省+市列,第三个是省+市+ ...

我用这个方法试试看看能搞定不谢谢喽{:10_277:}

疾风怪盗 发表于 2020-8-24 22:28:13

你发个源文件上来,否则不好测试啊

疾风怪盗 发表于 2020-8-24 23:19:19

本帖最后由 疾风怪盗 于 2020-8-25 15:23 编辑

import pandas as pd

a=pd.read_excel('2.xlsx')
print(a)
a['地址']= for i in a['地址']]#把省前面的全部去除
for i in range(len(a)):
    if a.loc.find('市') != -1:
      a.loc=a.loc.split('市')#取出市一级
    if a.loc.find('县') != -1:
      a.loc=a.loc.split('县').split('市')[-1] #取出县一级
a=a.fillna('无')
print(a)

b=pd.read_excel('3.xlsx')
b['市']=[:-1] for i in b['地址']]#取出市一级
b['省']= for i in b['地址']]#取出县一级
b=b.fillna('无')
print(b)

for i in range(len(b)):
    temp = b.loc
    for j in range(len(a)):
      if a.loc.find(temp) >=0:
            a.loc=b.loc+ a.loc#包含的做拼接
print(a)

a['地址'].to_excel('4.xlsx',index=False)#输出地址一列

写得比较啰嗦,不过大致就是这样,有更好的办法可以改改

超哥超级爱学习 发表于 2020-8-25 21:06:18

疾风怪盗 发表于 2020-8-24 22:28
你发个源文件上来,否则不好测试啊

我把源文件添加到附件里面了pandas还没用过   还是一脸迷茫{:10_266:}{:10_266:}{:10_266:}

超哥超级爱学习 发表于 2020-8-25 21:09:53

疾风怪盗 发表于 2020-8-24 23:19
写得比较啰嗦,不过大致就是这样,有更好的办法可以改改

我感觉这个和我的需求比较像,我新增加了源文件,你可以试下看能用不我的基础还太差还不知道该如何测试{:10_266:}{:10_266:}{:10_266:}

疾风怪盗 发表于 2020-8-26 00:03:58

import pandas as pd

a = pd.read_excel('需改名数据.xlsx')
print(f'原始数据:{a}')

b = pd.read_excel('地名库.xlsx')
print(f'标准地名库:{b}')

for i in range(len(b)):
    temp1 = b.loc#取出标准区县名字
    temp2 = b.loc#取出标准市名字
    for j in range(len(a)):
      if a.loc.find(temp1) >= 0:#如果在地址栏中找到标准区县名
            a.loc = b.loc#完整地址拼接
            for temp in a.loc.split(temp1):#防止地址中出现两次区县名,切割后成列表来循环拼接
                a.loc +=temp
      elif a.loc.find(temp2) >= 0:#如果在地址栏中未找到标准区县名,那查找标准市名,再做拼接
                a.loc = b.loc+b.loc+a.loc.split(temp2)

print(f'查找后数据:{a}')

a.to_excel('result.xlsx', index=False)#输出


之前陷入了误区,不需要切割出区县、市,直接查找就行了,不过我用的方法比较笨,就是循环,没想到更好的办法,你给的数据115个能完成110个,数据多了估计速度会慢点,可以试试用多进程多线程之类的再做做

你的数据表,最好不要有空格空项,填完整,试试看

超哥超级爱学习 发表于 2020-8-26 08:31:02

疾风怪盗 发表于 2020-8-26 00:03
之前陷入了误区,不需要切割出区县、市,直接查找就行了,不过我用的方法比较笨,就是循环,没想到更好 ...

太感谢了{:5_109:}{:5_109:}{:5_109:}{:5_109:}

超哥超级爱学习 发表于 2020-8-26 22:19:56

疾风怪盗 发表于 2020-8-26 00:03
之前陷入了误区,不需要切割出区县、市,直接查找就行了,不过我用的方法比较笨,就是循环,没想到更好 ...

我的基础太差了,我看了一晚上,还是看的迷迷糊糊的,方便时可以语音聊下吗?麻烦您了。QQ:326717860

疾风怪盗 发表于 2020-8-26 22:52:55

超哥超级爱学习 发表于 2020-8-26 22:19
我的基础太差了,我看了一晚上,还是看的迷迷糊糊的,方便时可以语音聊下吗?麻烦您了。QQ:326717860

QQ加你了
页: [1]
查看完整版本: 如何用python自动补充excel表格中的文字