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

Pandas合并类型不匹配求助:int与object列及转int报错

解决Pandas数据合并时Hour列类型不兼容问题

你的问题核心在于两点:

  • 转字符串后仍出现类型不兼容,大概率是其中一个DataFrame的Hour列转换不彻底,或存在隐式类型差异(比如一列是object类型字符串,另一列仍是int64);
  • df2的Hour列包含带字母的非数字值(如X253252352552),无法直接转为整数类型。

以下是分步解决方案:

步骤1:排查两列的实际类型与内容

先运行代码确认Hour列的类型和具体值,定位问题:

# 检查df1的Hour列信息
print("df1 Hour列类型:", df1['Hour'].dtype)
print("df1 Hour列部分值:", df1['Hour'].head(10).tolist())

# 检查df2的Hour列信息
print("df2 Hour列类型:", df2['Hour'].dtype)
print("df2 Hour列部分值:", df2['Hour'].head(10).tolist())

步骤2:强制统一转为字符串类型

如果确认是转换不彻底,用以下方式确保两列都转为字符串,同时处理空值和特殊字符:

# 转换并去除首尾空格,空值转为空字符串
df1['Hour'] = df1['Hour'].apply(lambda x: str(x).strip() if pd.notna(x) else '')
df2['Hour'] = df2['Hour'].apply(lambda x: str(x).strip() if pd.notna(x) else '')

# 再次验证类型
print("转换后df1 Hour类型:", df1['Hour'].dtype)
print("转换后df2 Hour类型:", df2['Hour'].dtype)

步骤3:改用merge方法进行合并

注意:join默认按索引合并,用on参数时稳定性不如专门的列匹配方法merge,建议替换为:

df3 = pd.merge(df1, df2, on='Hour', how='inner')

额外处理:提取df2 Hour列的数字部分(若需要)

如果X253252352552中的X是无效前缀,需要提取数字部分匹配df1的纯数字Hour列,可使用正则:

import re
# 提取字符串中的所有数字字符
df2['Hour'] = df2['Hour'].apply(lambda x: ''.join(re.findall(r'\d+', str(x))) if pd.notna(x) else '')
# 将df1的Hour也转为字符串统一匹配
df1['Hour'] = df1['Hour'].astype(str)

# 执行合并
df3 = pd.merge(df1, df2, on='Hour', how='inner')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:15:32