如何用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:} 直接用openpyxl呗 思路没问题吧,要双循环,就是如果你文件大,这样循环时间就长了,可以用pandas,先循环省市列表中县一列,去isin()找,找到了再拼接,应该会好一点
我做过一个识别扫描图片内容,根据抬头,自动重命名文件的,类似 qiuyouzhi 发表于 2020-8-24 12:32
直接用openpyxl呗
不知道该如何下手{:10_266:}{:10_266:} 疾风怪盗 发表于 2020-8-24 12:53
思路没问题吧,要双循环,就是如果你文件大,这样循环时间就长了,可以用pandas,先循环省市列表中县一列, ...
我试试看,不知道如何用pandas{:10_266:}{:10_266:}{:10_266:} openpyxl就可以了,循环嵌套就好。基表上弄3分数据,第一个是省单独一列,第二个是省+市列,第三个是省+市+区,可以减少循环次数。 yhhpf 发表于 2020-8-24 15:49
openpyxl就可以了,循环嵌套就好。基表上弄3分数据,第一个是省单独一列,第二个是省+市列,第三个是省+市+ ...
我用这个方法试试看看能搞定不谢谢喽{:10_277:} 你发个源文件上来,否则不好测试啊 本帖最后由 疾风怪盗 于 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-24 22:28
你发个源文件上来,否则不好测试啊
我把源文件添加到附件里面了pandas还没用过 还是一脸迷茫{:10_266:}{:10_266:}{:10_266:} 疾风怪盗 发表于 2020-8-24 23:19
写得比较啰嗦,不过大致就是这样,有更好的办法可以改改
我感觉这个和我的需求比较像,我新增加了源文件,你可以试下看能用不我的基础还太差还不知道该如何测试{:10_266:}{:10_266:}{:10_266:} 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 00:03
之前陷入了误区,不需要切割出区县、市,直接查找就行了,不过我用的方法比较笨,就是循环,没想到更好 ...
太感谢了{:5_109:}{:5_109:}{:5_109:}{:5_109:} 疾风怪盗 发表于 2020-8-26 00:03
之前陷入了误区,不需要切割出区县、市,直接查找就行了,不过我用的方法比较笨,就是循环,没想到更好 ...
我的基础太差了,我看了一晚上,还是看的迷迷糊糊的,方便时可以语音聊下吗?麻烦您了。QQ:326717860 超哥超级爱学习 发表于 2020-8-26 22:19
我的基础太差了,我看了一晚上,还是看的迷迷糊糊的,方便时可以语音聊下吗?麻烦您了。QQ:326717860
QQ加你了
页:
[1]