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

Pandas 1.1.5与1.2.0及以上版本merge方法行为差异问题

Pandas 1.2.0+左连接匹配失效问题分析与解决

以下这段左连接代码在Pandas 1.1.5版本可正常执行,但升级到1.2.0及以上版本后,即使关联键DLM存在明确匹配项,也无法正确关联,且无报错提示:

mapping = pd.merge(
    df_1, df_2, how="left", on=["DLM"]
)

示例复现

原始数据

df_1:

ADLM
12
34

df_2:

DLMB
23

不同版本执行结果

  • Pandas 1.1.5(正常):
ADLMB
123
34NaN
  • Pandas 1.2.0+(异常):
ADLMB
12NaN
34NaN

注:以上为示例数据,非实际生产数据

问题根源

Pandas 1.2.0版本开始,对merge操作的关联键类型匹配逻辑做了严格调整:不再自动隐式转换不同数据类型的关联键。如果两个DataFrame的DLM列数据类型不一致(比如一个是Python原生int,另一个是NumPy的np.int64;或者一个是数值型,另一个是字符串型),即使表面值相同,也会被判定为不匹配。

而Pandas 1.1.5及更早版本会自动尝试隐式转换类型以完成匹配,所以不会出现此问题。

解决方法

核心思路是统一两个DataFrame关联键的数据类型,以下是两种常用方案:

方案1:统一转为相同数值类型

# 统一转为Python原生int(或根据实际需求用np.int64等)
df_1['DLM'] = df_1['DLM'].astype(int)
df_2['DLM'] = df_2['DLM'].astype(int)

# 重新执行merge
mapping = pd.merge(df_1, df_2, how="left", on=["DLM"])

方案2:统一转为字符串类型

如果关联键存在混合类型(比如包含数值和字符串),转为字符串更稳妥:

df_1['DLM'] = df_1['DLM'].astype(str)
df_2['DLM'] = df_2['DLM'].astype(str)

mapping = pd.merge(df_1, df_2, how="left", on=["DLM"])

辅助排查:检查键的类型

可以先打印两列的数据类型,确认是否存在差异:

print(f"df_1['DLM']类型:{df_1['DLM'].dtype}")
print(f"df_2['DLM']类型:{df_2['DLM'].dtype}")

验证结果

统一类型后,Pandas 1.2.0+版本的执行结果将和1.1.5版本一致,能够正确匹配关联键。


内容的提问来源于stack exchange,提问作者Deepu Kr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:22:44