如何在Pandas中正确按指定列实现DataFrame连接?
Pandas按指定列连接报错的解决方法
错误原因
你用df2.join(df1, on='letter')时踩了两个关键问题:
join方法的on参数逻辑是用调用方(df2)的指定列匹配被调用方(df1)的索引,不是让两个表的同名列直接做连接,完全不符合你想按letter列连接的需求。- 两个表的
letter列数据类型不一致(一个是object,一个是int64),就算逻辑正确也会触发类型不匹配的报错。
正确解决方案
用pd.merge()方法,它专门用于按指定列做连接,不需要依赖索引,完美匹配你的需求:
步骤1:统一列数据类型(可选但推荐)
先把两个表的letter列转成相同类型(比如字符串),彻底避免类型冲突:
import pandas as pd df1 = pd.read_excel(PATH + r"\foo.xlsx") df2 = pd.read_excel(PATH + r"\bar.xlsx") # 统一转成字符串类型 df1['letter'] = df1['letter'].astype(str) df2['letter'] = df2['letter'].astype(str)
步骤2:用merge按指定列做外连接
df3 = pd.merge(df2, df1, on='letter', how='outer')
验证结果
执行后得到的结果和你期望的逻辑一致(空值会以NaN显示,对应你期望结果里的空白):
letter bar foo 0 A XXXX AAAA 1 A XXXX AAAA 2 A XXXX AAAA 3 A XXXX AAAA 4 A XXXX AAAA 5 A XXXX AAAA 6 A XXXX AAAA 7 A XXXX AAAA 8 B YYYY BBBB 9 B YYYY CCCC 10 B YYYY DDDD 11 B YYYY DDDD 12 B ZZZZ BBBB 13 B ZZZZ CCCC 14 B ZZZZ DDDD 15 B ZZZZ DDDD 16 C NaN EEEE
内容的提问来源于stack exchange,提问作者Fernando Trujillo
相关产品推荐
相关产品推荐

