如何使用pandas的pd.merge合并int64与object类型的关联列
问题原因
合并操作要求两侧的连接键数据类型一致,你当前两个DataFrame的Alias Number列分别为int64、object类型,类型不匹配触发报错。
解决方案
将int64类型的Alias Number列统一转为字符串(object)类型即可,因为另一个列包含字母无法转为整数,只能做向字符串的统一转换。
方法1:提前修改原DataFrame列类型
假设ePPQ_NoNA_Alias的Alias Number为int64类型,执行转换代码:
# 转为字符串,同时去除前后空格避免异常匹配 ePPQ_NoNA_Alias['Alias Number'] = ePPQ_NoNA_Alias['Alias Number'].astype(str).str.strip() # 可选:同时给object类型的列也做去空格处理,避免因多余空格匹配失败 FY17_NoNA_Alias['Alias Number'] = FY17_NoNA_Alias['Alias Number'].str.strip()
之后再执行你原本的merge代码即可正常运行:
ePPQ_FY17_file = pd.merge(ePPQ_NoNA_Alias, FY17_NoNA_Alias, how='left', on='Alias Number', left_index=False, right_index=False)
方法2:临时转换类型,不修改原DataFrame
如果不想改动原DataFrame的数据,可以在merge时临时转换连接键类型:
ePPQ_FY17_file = pd.merge( # 临时转换int类型列为字符串 ePPQ_NoNA_Alias.assign(**{'Alias Number': lambda df: df['Alias Number'].astype(str).str.strip()}), # 临时处理object类型列的空格 FY17_NoNA_Alias.assign(**{'Alias Number': lambda df: df['Alias Number'].str.strip()}), how='left', on='Alias Number' )
注意事项
- 转换后如果匹配结果不符合预期,可以先检查两类值是否存在大小写差异、多余特殊字符等问题,提前清洗后再合并。
内容的提问来源于stack exchange,提问作者Aaron E Larson
相关产品推荐
相关产品推荐

