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
相关产品推荐
相关产品推荐

