python处理excel 表格,把一张表的数据复制到另外一张表里面
如图,打开了2个表格,表一和表二,需要把表一的前5列和表二的前五列对比,内容一样的话把后面的复制到表二里面表一里面的前五列内容一定包含在表二里面
表一和表二的行数不固定 python鱼new 发表于 2021-4-14 13:18
复制过去就好了,表二里面后面的列没有内容的
那你用 pd.merge() 试试吧,两张表做关联,外连接,最后过滤出自己需要的,即可。 @阿奇_o 哪位大佬帮忙看看,加我qq:595928473发个10元小红包感谢 大致懂你意思了,这用python很好做啊
提供下思路给你:
1.读取第一个表格将前五列合作一起做个标签 用列表存起来 叫做Key列表。 将行数对应的后N行 存起来 叫做Data列表。
2.若标签空值时,停止添加数据。
3,读取第二个表格 将第一行前五列读出, 根据该标签 用index()函数找到坐标 ,然后拷贝Data数据到表二
会使用到 xlwt xlrd 两个库函数
……“把表一的前5列和表二的前五列对比,内容一样的话把后面的复制到表二里面”
相同的,复制过去,然后呢?覆盖掉 表2里数据? 阿奇_o 发表于 2021-4-14 10:41
……“把表一的前5列和表二的前五列对比,内容一样的话把后面的复制到表二里面”
相同的,复制过去,然 ...
复制过去就好了,表二里面后面的列没有内容的
591821661 发表于 2021-4-14 00:39
大致懂你意思了,这用python很好做啊
提供下思路给你:
谢谢回答, 我思路也是前五列作key,后面做值,具体怎么搞就不会了,刚学py没多久 不知道我理解的对不对,下边1和2 是原始数据,把前5列设置成了key
然后两个表格join。
输出是3
import pandas as pd
path = r'test.xlsx'
df1 = pd.read_excel(path,sheet_name=0,)
# print(df1)
df2 = pd.read_excel(path,sheet_name=1,)
# print(df2)
res=df1.join(df2.set_index(['Q', 'W', 'E', 'R', 'T']),on=['Q', 'W', 'E', 'R', 'T'])
print(res)
res.to_excel(r'test1.xlsx') 本帖最后由 python鱼new 于 2021-4-14 17:48 编辑
rsj0315 发表于 2021-4-14 15:49
不知道我理解的对不对,下边1和2 是原始数据,把前5列设置成了key
然后两个表格join。
输出是3
结果应该是这样的,你的2.jpg 里面的前5列不会有重复的,最后输出结果保持原来行的顺序 rsj0315 发表于 2021-4-14 15:49
不知道我理解的对不对,下边1和2 是原始数据,把前5列设置成了key
然后两个表格join。
输出是3
1.png 2.png 是处理之前,3.png是结果, 2 3 的行顺序没有改变 python鱼new 发表于 2021-4-14 19:08
1.png 2.png 是处理之前,3.png是结果, 2 3 的行顺序没有改变
F需求量这一列不用管 阿奇_o 发表于 2021-4-14 21:56
那你用 pd.merge() 试试吧,两张表做关联,外连接,最后过滤出自己需要的,即可。
谢谢,我研究看看 那就用楼上说的merge
import pandas as pd
path = r'test.xlsx'
df1 = pd.read_excel(path,sheet_name=0,)
# print(df1)
df2 = pd.read_excel(path,sheet_name=1,)
# print(df2)
res = pd.merge(df2,df1,
on=['Q', 'W', 'E', 'R', 'T'],
how='left',)
# validate='M:1')
print(res)
res.to_excel(r'test1.xlsx')
用pandas重写写入表格后,格式就没有了,还得重新用openpyxl设置一下,具体看需求吧 本帖最后由 python鱼new 于 2021-4-15 10:33 编辑
阿奇_o 发表于 2021-4-14 21:56
那你用 pd.merge() 试试吧,两张表做关联,外连接,最后过滤出自己需要的,即可。
你好,重复的列都显示了,自己加了个_x_y,我只想显示_x或_y要怎么设置 本帖最后由 阿奇_o 于 2021-4-15 22:57 编辑
python鱼new 发表于 2021-4-15 10:29
你好,重复的列都显示了,自己加了个_x_y,我只想显示_x或_y要怎么设置
按列名不好选,那就用 df.columns,类型虽然是DF的Index对象,
实际上就相当于一个列表,列表就可以随便切,各种切。。
或 直接用 df.iloc[ : , 2:-1]# 从第3列 切到 倒数第二列
比如,你 result = pd.merge(left, right, how='left', ...) 外连接后,
那么,前一半的列 就是 left的所有列名(默认带_x),后一半的列 就是right的 ,
于是,“只显示_x的”,就可以这样:
result]#假设左右表各有两列,并以各自的index关联
阿奇_o 发表于 2021-4-15 22:51
按列名不好选,那就用 df.columns,类型虽然是DF的Index对象,
实际上就相当于一个列表,列表就可以随 ...
好的,谢谢大佬 是的是的
页:
[1]