请求编写Python/Pandas代码实现两个CSV文件左连接并添加匹配状态
Python/Pandas实现CSV左连接并添加匹配状态
需求说明
以两个CSV文件的第一列为键执行左连接,同时为结果添加匹配状态标记(Match/No_match),替代卡顿的Excel批量数据处理方式。
示例数据
- CSV1(主表):
AN DNM OCD TRI 1 343 5656 90 2 344 5657 91 3 345 5658 92 4 346 5659 93
- CSV2(关联表):
AN2 STATE PLAN 4 3 19 3 2 35 7 3 19 8 3 19
实现代码
import pandas as pd # 读取两个CSV文件,替换为你的实际文件路径 df1 = pd.read_csv('csv1.csv', sep='\s+') # \s+适配空格/制表符混合分隔的格式 df2 = pd.read_csv('csv2.csv', sep='\s+') # 执行左连接:以df1的AN列和df2的AN2列为匹配键 merged_df = pd.merge( df1, df2, left_on='AN', right_on='AN2', how='left' ) # 添加匹配状态列:根据关联列是否为空判断 merged_df['Join Status'] = merged_df['STATE'].apply( lambda x: 'Match' if pd.notna(x) else 'No_match' ) # 移除多余的AN2列(可选,按需保留) merged_df = merged_df.drop('AN2', axis=1) # 调整列顺序,将匹配状态列移至末尾(可选) cols = merged_df.columns.tolist() cols = cols[:-1] + [cols[-1]] merged_df = merged_df[cols] # 保存结果到新CSV,替换为你的目标路径 merged_df.to_csv('merged_result.csv', sep='\t', index=False) # 打印查看结果 print(merged_df)
代码解释
- 文件读取:
sep='\s+'适配空格/制表符混合分隔的格式,若你的CSV是逗号分隔,改为sep=','即可。 - 左连接逻辑:
how='left'保证主表(CSV1)的所有行都保留,仅匹配关联表(CSV2)中符合条件的行。 - 状态标记:通过判断
STATE列是否非空(pd.notna())标记匹配状态,用PLAN列判断效果一致。 - 结果处理:移除冗余的
AN2列,调整列顺序后保存,index=False避免生成多余索引列。
运行结果
AN DNM OCD TRI STATE PLAN Join Status 0 1 343 5656 90 NaN NaN No_match 1 2 344 5657 91 NaN NaN No_match 2 3 345 5658 92 2.0 35.0 Match 3 4 346 5659 93 3.0 19.0 Match
(若需要将NaN显示为空字符串,可添加merged_df = merged_df.fillna(''))
内容的提问来源于stack exchange,提问作者R. John
相关产品推荐
相关产品推荐

