Python&Pandas按两个CSV的user匹配字段新增指定列问题求助
问题原因
你当前使用的pd.concat()是用于沿行/列直接拼接数据的方法,无法实现按共同字段关联匹配的需求,这类表关联场景应该使用Pandas提供的merge()方法,逻辑等价于数据库的JOIN操作。
调整后可直接运行的代码
import pandas as pd # 读取文件时加skipinitialspace=True,自动去掉字段/值前后的多余空格,避免因为CSV里的空格导致匹配失败 df_roster = pd.read_csv('roster.csv', skipinitialspace=True) df_assignment = pd.read_csv('assignment.csv', skipinitialspace=True) # 以user为共同键,左关联保留assignment的所有行,匹配roster的对应字段 df_merged = pd.merge( left=df_assignment, right=df_roster[['user', 'first_name', 'last_name', 'user_id']], on='user', how='left' ) # 输出结果到新CSV,index=False表示不写入Pandas自动生成的行序号 df_merged.to_csv('merged_result.csv', index=False)
参数说明
on='user':指定两个表用user字段作为关联匹配的唯一键how='left':保留左表(也就是assignment表)的所有行,哪怕右表没有对应匹配项也不会丢失原assignment的数据,符合你在assignment基础上新增字段的需求- 右表指定了只取
['user', 'first_name', 'last_name', 'user_id']四个字段,避免roster里的其他无关字段被带入结果
内容的提问来源于stack exchange,提问作者Daniel Hutchinson
相关产品推荐
相关产品推荐

