python鱼new 发表于 2021-4-13 19:06:13

python处理excel 表格,把一张表的数据复制到另外一张表里面

如图,打开了2个表格,表一和表二,需要把表一的前5列和表二的前五列对比,内容一样的话把后面的复制到表二里面
表一里面的前五列内容一定包含在表二里面
表一和表二的行数不固定

阿奇_o 发表于 2021-4-13 19:06:14

python鱼new 发表于 2021-4-14 13:18
复制过去就好了,表二里面后面的列没有内容的

那你用 pd.merge() 试试吧,两张表做关联,外连接,最后过滤出自己需要的,即可。

python鱼new 发表于 2021-4-13 19:07:05

@阿奇_o

python鱼new 发表于 2021-4-13 20:31:29

哪位大佬帮忙看看,加我qq:595928473发个10元小红包感谢

591821661 发表于 2021-4-14 00:39:19

大致懂你意思了,这用python很好做啊

提供下思路给你:
1.读取第一个表格将前五列合作一起做个标签 用列表存起来 叫做Key列表。 将行数对应的后N行 存起来 叫做Data列表。
2.若标签空值时,停止添加数据。

3,读取第二个表格 将第一行前五列读出, 根据该标签 用index()函数找到坐标 ,然后拷贝Data数据到表二

会使用到 xlwt xlrd 两个库函数

阿奇_o 发表于 2021-4-14 10:41:18

……“把表一的前5列和表二的前五列对比,内容一样的话把后面的复制到表二里面”

相同的,复制过去,然后呢?覆盖掉 表2里数据?

python鱼new 发表于 2021-4-14 13:18:35

阿奇_o 发表于 2021-4-14 10:41
……“把表一的前5列和表二的前五列对比,内容一样的话把后面的复制到表二里面”

相同的,复制过去,然 ...

复制过去就好了,表二里面后面的列没有内容的

python鱼new 发表于 2021-4-14 13:41:00

591821661 发表于 2021-4-14 00:39
大致懂你意思了,这用python很好做啊

提供下思路给你:


谢谢回答, 我思路也是前五列作key,后面做值,具体怎么搞就不会了,刚学py没多久

rsj0315 发表于 2021-4-14 15:49:24

不知道我理解的对不对,下边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:37:47

本帖最后由 python鱼new 于 2021-4-14 17:48 编辑



python鱼new 发表于 2021-4-14 17:47:33

rsj0315 发表于 2021-4-14 15:49
不知道我理解的对不对,下边1和2 是原始数据,把前5列设置成了key
然后两个表格join。
输出是3


结果应该是这样的,你的2.jpg 里面的前5列不会有重复的,最后输出结果保持原来行的顺序

python鱼new 发表于 2021-4-14 19:08:20

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:09:14

python鱼new 发表于 2021-4-14 19:08
1.png 2.png 是处理之前,3.png是结果,    2   3 的行顺序没有改变

F需求量这一列不用管

python鱼new 发表于 2021-4-15 09:19:57

阿奇_o 发表于 2021-4-14 21:56
那你用 pd.merge() 试试吧,两张表做关联,外连接,最后过滤出自己需要的,即可。

谢谢,我研究看看

rsj0315 发表于 2021-4-15 10:15:06

那就用楼上说的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')

rsj0315 发表于 2021-4-15 10:19:24

用pandas重写写入表格后,格式就没有了,还得重新用openpyxl设置一下,具体看需求吧

python鱼new 发表于 2021-4-15 10:29:25

本帖最后由 python鱼new 于 2021-4-15 10:33 编辑

阿奇_o 发表于 2021-4-14 21:56
那你用 pd.merge() 试试吧,两张表做关联,外连接,最后过滤出自己需要的,即可。

你好,重复的列都显示了,自己加了个_x_y,我只想显示_x或_y要怎么设置

阿奇_o 发表于 2021-4-15 22:51:11

本帖最后由 阿奇_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关联


python鱼new 发表于 2021-4-16 09:51:31

阿奇_o 发表于 2021-4-15 22:51
按列名不好选,那就用 df.columns,类型虽然是DF的Index对象,
实际上就相当于一个列表,列表就可以随 ...

好的,谢谢大佬

荆棘千千 发表于 2021-4-17 12:36:26

是的是的
页: [1]
查看完整版本: python处理excel 表格,把一张表的数据复制到另外一张表里面