You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 05:42:00