为何Pandas .join()指定列名无效?需用索引关联
Pandas .join()方法为何似乎强制使用索引关联?
这是因为.join()的设计逻辑就是默认以右侧DataFrame的索引作为关联键,on参数的作用并不是让两边用同名列直接关联,而是指定左侧DataFrame中用来匹配右侧索引的列——文档里说的“可接受索引或列名”,指的是左侧的索引或列名,本质还是围绕右侧索引来做匹配。
你的错误代码原因分析
当你执行df1.join(df2, on='name')时:
- 右侧的
df2用的是默认的整数索引(类型为int64) - 你指定左侧用
name列(类型为object)去匹配右侧的整数索引,类型不匹配,自然触发ValueError
正确代码的逻辑
df2.set_index('name')把df2的索引换成了name列的字符串值,此时:
- 右侧索引类型和左侧
name列类型一致 on='name'指定用df1的name列去匹配df2的name索引,关联逻辑成立,所以能正常运行
补充:和merge的区别
如果想像关系数据库那样直接用同名列做关联,pd.merge()更直观,比如:
newdf = pd.merge(df1, df2, on='name')
而.join()本质是merge的简化封装,专门针对以索引为关联键的场景,on参数只是允许左侧不用自身索引,改用指定列来匹配右侧的索引。
内容的提问来源于stack exchange,提问作者eschares
相关产品推荐
相关产品推荐

