现有两张表df1和df2,所有列名都相同,但行数不一样,如何用pandas根据名为“合同编号”的列将df1和df2进行匹配, 若df2中有df1没有的数据则把这些数据写入df1底部但不改变df1的列,并打印“df1”已更新,若df2中所有数据df1都有,则打印“df1不用更新”
时间: 2024-05-08 11:17:48 浏览: 140
可以使用pandas的merge方法,将df1和df2按照“合同编号”列进行合并,合并方式为左连接(left join),即以df1为基准,将df2中与df1匹配的行合并到df1中。然后判断df1和df2的行数是否相等,如果不相等,说明df2中有df1没有的数据,将这些数据写入df1底部并打印“df1已更新”,否则打印“df1不用更新”。
代码如下:
```
import pandas as pd
# 读取df1和df2
df1 = pd.read_csv('df1.csv')
df2 = pd.read_csv('df2.csv')
# 按照“合同编号”列进行合并
merged = pd.merge(df1, df2, on='合同编号', how='left')
# 判断是否需要更新df1
if merged.shape[0] == df1.shape[0]:
print('df1不用更新')
else:
# 将df2中与df1不匹配的行写入df1底部
new_rows = merged.loc[merged['合同编号'].isin(df1['合同编号']) == False]
new_rows.drop_duplicates(inplace=True)
new_rows.reset_index(drop=True, inplace=True)
df1 = pd.concat([df1, new_rows], ignore_index=True)
df1.to_csv('df1.csv', index=False)
print('df1已更新')
```
阅读全文