You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas中正确按指定列实现DataFrame连接?

Pandas按指定列连接报错的解决方法

错误原因

你用df2.join(df1, on='letter')时踩了两个关键问题:

  1. join方法的on参数逻辑是用调用方(df2)的指定列匹配被调用方(df1)的索引,不是让两个表的同名列直接做连接,完全不符合你想按letter列连接的需求。
  2. 两个表的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 14:20:04