Pandas join方法疑问:无匹配为何返回df4数据而非NaN?
问题原因解析
核心误区:误解join()方法on参数的作用
pd.DataFrame.join()默认是按索引(index)完成连接的,你指定的on='col1'并不是让两张表按各自的col1字段匹配,而是:
- 将左表
df1的col1列作为临时连接索引 - 用这个临时索引去匹配右表
df4的原生索引,而非右表的col1字段
具体匹配逻辑拆解
结合你的数据来看:
- df1的
col1值为[1,2,3,4],作为临时索引后,对应右表df4的索引0,1,2,3 - 匹配时:
- df1临时索引
1→ 匹配df4索引1的行(colA='b',col1='B') - df1临时索引
2→ 匹配df4索引2的行(colA='c',col1='C') - df1临时索引
3→ 匹配df4索引3的行(colA='d',col1='D') - df1临时索引
4→ df4没有对应索引,返回NaN
- df1临时索引
这就完全对应了你得到的结果:前3行匹配到右表对应索引的行,最后一行无匹配返回NaN。
正确实现预期效果的方法
如果想要按两张表的col1字段进行左连接,应该使用merge()方法:
df1.merge(df4, on='col1', how='left')
此时因两边col1的类型(数值/字符串)和值完全不匹配,所有来自df4的字段都会返回NaN,符合你的预期。
内容的提问来源于stack exchange,提问作者Sachin Gurarikar
相关产品推荐
相关产品推荐

