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

为何Pandas合并object类型列失败(一列由int转object)

Pandas合并失败的原因及解决逻辑解析

问题重现

执行以下代码后,Pandas合并返回空DataFrame,无法匹配预期的行:

import pandas as pd
data1 = {'c1': ['J', 'A', 'B'],
         'key': [25, 30, 35]}
df1 = pd.DataFrame(data1)

data2 = {'c2': ['A', 'B', 'C'],
         'key': ["25","30","36"]}
df2 = pd.DataFrame(data2, dtype="O")

df1.key = df1.key.astype("O")

print(df1.merge(df2, on = "key"))

# 输出:
# Empty DataFrame
# Columns: [c1, key, c2]
# Index: []

但如果将df1.key先转为字符串再转回object类型,合并就能正常匹配:

df1.key = df1.key.astype(str).astype("O")

原因解析

  • 第一次转换的本质:类型未真正对齐
    df1.key.astype("O")只是把列的 dtype 标记为object,但列里的元素仍然是整数类型(比如df1.key[0]的类型是int)。而df2的key列虽然dtype也是object,但元素是字符串类型(df2.key[0]的类型是str)。Pandas的merge操作是严格匹配元素的值+类型的,整数25和字符串"25"在Pandas眼里是完全不同的元素,自然匹配不到。

  • 二次转换的作用:统一元素底层类型
    astype(str)会把整数真正转换成字符串类型(比如25变成"25"),此时再转回object dtype,列里的元素底层类型已经是字符串了,和df2的key列元素类型、值完全一致,merge时就能正常匹配到对应行。

验证方式

可以通过打印元素类型确认差异:

# 第一次转换后查看元素类型
df1.key = df1.key.astype("O")
print(type(df1.key[0]))  # 输出:<class 'int'>

# 二次转换后查看元素类型
df1.key = df1.key.astype(str).astype("O")
print(type(df1.key[0]))  # 输出:<class 'str'>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 01:11:00