pandas两DataFrame合并仅保留df1的code数据及join返回NaN问题
错误原因
你之前操作返回全NaN主要是两个问题:
- 列名大小写不匹配:
join参数中写的关联键是'Code'(首字母大写),但两个DataFrame的实际关联列名为小写的'code',无法匹配到对应关联字段 join方法的逻辑限制:join默认按索引对齐,如果你用on参数指定左表的关联列,右表必须提前把对应关联列设置为索引,否则也会匹配失败
正确解决方法
优先推荐用merge方法实现,逻辑更直观,不需要修改原表索引:
import pandas as pd # 你的原表定义 df1 = pd.DataFrame([['a', 1], ['b', 2],['c', 3],['d', 4],['e', 5],['f', 5]], columns=['code', 'value1']) df2 = pd.DataFrame([['a', 11], ['b', 12],['c', 13],['d', 14],['e', 15],['f', 16],['g', 17], ['h', 2],['i', 3],['j', 4],['k', 5],['l', 5]], columns=['code', 'value2']) # 合并代码:how='left'表示保留左表df1的所有行,只匹配df2中code一致的记录 df_result = pd.merge(df1, df2, on='code', how='left')
如果要使用join方法,需要先把df2的索引设置为code列,修正后的写法如下:
df_result = df1.join(df2.set_index('code'), on='code')
两种写法得到的结果一致,都会保留df1的a-f共6行数据,同时新增匹配正确的value2列。
内容的提问来源于stack exchange,提问作者mhooper
相关产品推荐
相关产品推荐

