DataFrame.join报object与int64合并错误但merge正常的原因
问题原因分析
核心差异在于join和merge方法中on参数的逻辑完全不同:
merge的on='person2'行为:会在两个DataFrame中同时定位名为person2的列,将这两列作为连接键进行匹配。你的两个DataFrame的person2列均为object类型,类型匹配,因此可以正常执行。join的on='person2'行为:仅指定调用方(group[['person2']])使用person2列作为连接键,而被连接对象(df_returns[['person2']])会用自身的索引来参与匹配,而非它的person2列。
报错提示中提到的“object和int64列合并”,说明df_returns[['person2']]的索引是int64类型,和调用方person2列的object类型不兼容,因此触发ValueError。你之前用dtypes仅检查了列的类型,未关注索引类型,才造成了误解。可以执行以下代码验证索引类型:
df_returns[['person2']].index.dtype
结果应该为int64。
如果想用join实现和merge相同的效果,需要先将被连接对象的person2列设为索引,确保类型匹配:
group[['person2']].join(df_returns[['person2']].set_index('person2'), on='person2')
内容的提问来源于stack exchange,提问作者FooBar
相关产品推荐
相关产品推荐

