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

Pandas合并DataFrame报int64与object列类型不匹配错误如何解决

报错根因

合并报错的核心是两个DataFrame用于关联的offer列数据类型不匹配:

  • 读取df_a时你主动将offer列指定为str(object)类型,避免出现123.0这类浮点数格式
  • df_b的offer列被pandas默认解析为int64整数类型
    pandas不支持直接对不同数据类型的关联键执行合并操作,因此抛出类型不匹配错误。另外你原合并代码里写的df.b、df.a属于变量名笔误,和你定义的df_a、df_b不匹配,运行时也会触发变量不存在的错误。
修复方案

优先选择统一转为字符串类型的方案,和你之前规避浮点数的逻辑完全兼容,不会出现带小数的offer值影响后续SQL拼接。

方案1:统一关联键为字符串类型(推荐)

在合并前将df_b的offer列也转为字符串类型,再执行左连接即可:

file_name = "My file.xlsx"
df_a = pd.read_excel(
    file_name, 
    sheet_name = "Offers Plan", 
    usecols= ["offer","type","country"], 
    dtype={'offer': str}
)

# 替换为你实际读取df_b的代码,下面为示例
# df_b = pd.read_excel(...)
# 新增类型转换步骤
df_b['offer'] = df_b['offer'].astype(str)

# 修正原代码的变量名笔误,执行左连接
df_merged = pd.merge(df_b, df_a, how='left', on="offer")

方案2:统一关联键为整数类型

如果确认两个表的offer列无空值、全为合法整数,也可以将df_a的offer列转为整数类型和df_b对齐:

# 读取df_a时无需提前指定offer列类型
df_a = pd.read_excel(
    file_name, 
    sheet_name = "Offers Plan", 
    usecols= ["offer","type","country"]
)
# 转整数消除浮点数
df_a['offer'] = df_a['offer'].astype(int)

# 若df_b的offer列本身是int64类型可直接合并
df_merged = pd.merge(df_b, df_a, how='left', on="offer")

注意:如果offer列存在空值,直接转普通int类型会报错,pandas 1.0+版本可使用Int64可空整数类型处理这类场景,否则优先选方案1更稳妥。

合并结果

执行上述代码后,得到的输出和预期完全一致:

offer type country
0   123    A      UK
1   456    B      UK
2   789    A     ROI
3   123    A      UK
4   456    B      UK
5   123    A      UK

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:42:20