如何比对两个行列数不同的CSV文件,通过公共字段关联补充对应数据
实现方案
numpy的where方法适用于单数据集的条件赋值,跨数据集关联匹配时容易出现索引错位,推荐使用专门处理结构化表格数据的Pandas库实现该需求,代码如下:
- 第一步:读取两个CSV文件
import pandas as pd # 替换为你本地的文件路径 df1 = pd.read_csv("file1.csv") df2 = pd.read_csv("file2.csv")
- 第二步:执行左关联合并
以文件1的全部数据为基准,按公共字段PRODUCT SERIAL匹配文件2的对应字段,未匹配到的字段值默认填充为NaN,手动替换为N/A即可:
# 左连接合并 merged_df = pd.merge( left=df1, right=df2[["PRODUCT SERIAL", "Shipment Day", "Price"]], on="PRODUCT SERIAL", how="left" ) # 替换空值为N/A merged_df = merged_df.fillna("N/A")
- 第三步:导出合并结果
# 导出为新CSV,index=False表示不导出pandas自动生成的行索引 merged_df.to_csv("merged_result.csv", index=False)
注意事项
- 若匹配结果全为N/A,可先检查两个文件的
PRODUCT SERIAL字段格式是否一致,比如是否存在一个是数字格式一个是字符串格式、字段值前后有多余空格的情况,合并前可先统一格式:
df1["PRODUCT SERIAL"] = df1["PRODUCT SERIAL"].astype(str).str.strip() df2["PRODUCT SERIAL"] = df2["PRODUCT SERIAL"].astype(str).str.strip()
- 若有重名字段需求,可在
pd.merge方法中添加suffixes参数自定义两个表重名字段的后缀,避免字段被覆盖。
内容的提问来源于stack exchange,提问作者re-learn
相关产品推荐
相关产品推荐

