如何用Python Pandas基于双键交集合并不同长度的CSV文件?
用Pandas合并不同长度的CSV,基于多列匹配生成目标文件
嘿,这个需求用Pandas的merge功能就能轻松实现,哪怕两个DataFrame长度不一样也完全没问题!我给你一步步拆解操作:
步骤1:导入Pandas并读取CSV文件
首先咱们得把两个CSV文件读成DataFrame,注意你的CSV列名里带了空格(比如ID1 , att1 , att2),所以读取的时候加上skipinitialspace=True,自动去掉列名里的多余空格,避免后续匹配出错:
import pandas as pd # 读取两个CSV文件,处理列名中的空格 df1 = pd.read_csv('one.csv', skipinitialspace=True) df2 = pd.read_csv('two.csv', skipinitialspace=True)
步骤2:基于att1和att2做内连接匹配
用merge方法,指定匹配的键是att1和att2,并且用how='inner'——这个参数的作用就是只保留两边同时存在匹配项的行,完美符合你“仅保留att1和att2值相同的条目”的需求,不管两个DataFrame长度差多少都不影响:
# 内连接,基于att1和att2匹配 merged_df = pd.merge(df1, df2, on=['att1', 'att2'], how='inner')
步骤3:调整列的顺序
默认merge后的列顺序是ID1, att1, att2, ID2,咱们把它改成你想要的ID1, ID2, att1, att2:
# 重新排列列 final_df = merged_df[['ID1', 'ID2', 'att1', 'att2']]
步骤4:保存为目标CSV文件
最后把处理好的DataFrame保存成three.csv,记得加index=False,不然会多出一列索引:
final_df.to_csv('three.csv', index=False)
完整代码
把上面的步骤整合起来就是完整的代码啦:
import pandas as pd # 读取CSV df1 = pd.read_csv('one.csv', skipinitialspace=True) df2 = pd.read_csv('two.csv', skipinitialspace=True) # 内连接匹配 merged_df = pd.merge(df1, df2, on=['att1', 'att2'], how='inner') # 调整列顺序并保存 final_df = merged_df[['ID1', 'ID2', 'att1', 'att2']] final_df.to_csv('three.csv', index=False)
运行之后生成的three.csv就是你想要的格式啦,测试你的示例数据,输出正好是:
ID1,ID2,att1,att2 a1,E3,b1,c1 a2,E2,b2,c2
内容的提问来源于stack exchange,提问作者vishu
相关产品推荐
相关产品推荐

