使用pandas按id关联两个CSV数据框新增文本列,处理未匹配空值
问题根源
你写的合并代码默认使用pd.merge的**内连接(inner join)**规则:只会保留两个文件中id能双向匹配的行,单边存在的id会被直接剔除,因此无法实现「未匹配项保留空值」的要求。
对应实现方案
场景1:以train.csv为基准,保留train全部行
也就是所有train里的记录都要保留,text匹配不到对应id时,text字段自动填充null,只要修改merge的连接参数即可:
import pandas as pd train = pd.read_csv("train.csv") text = pd.read_csv("text.csv") # 左连接:以左表(train)的所有行为基准匹配右表(text) combined = pd.merge(train, text, on=['id'], how='left') # 可选:调整列顺序为你预期的id、sentiment、text顺序 combined = combined[['id', 'sentiment', 'text']] # 可选:导出结果为csv文件 combined.to_csv("combined_result.csv", index=False)
场景2:保留两个文件的所有id记录
如果需要不管是train独有还是text独有的id都要保留,匹配不到的对应字段自动填null,把连接方式改成全外连接即可:
combined = pd.merge(train, text, on=['id'], how='outer')
常见踩坑提示
- 如果读取text.csv时因为文本内容含逗号、换行符出现解析错位,可以在
pd.read_csv时加上engine='python'参数,提升复杂文本的解析兼容性。 - 合并后如果出现重复的id行,说明你的源csv里存在重复id,可以在merge前先通过
train = train.drop_duplicates(subset=['id'])、text = text.drop_duplicates(subset=['id'])去重,避免合并结果行数异常。
内容的提问来源于stack exchange,提问作者kerma
相关产品推荐
相关产品推荐

