Pandas2.2 DataFrame
Combining comparing joining merging
方法 | 描述 |
---|
DataFrame.assign(**kwargs) | 用于向 DataFrame 添加新列或替换现有列的方法 |
DataFrame.compare(other[, align_axis, …]) | 用于比较两个 DataFrame 的差异的方法 |
DataFrame.join(other[, on, how, lsuffix, …]) | 用于**将两个 DataFrame 按列合并(默认按行索引对齐)**的方法 |
pandas.DataFrame.join()
pandas.DataFrame.join()
是一个用于**将两个 DataFrame 按列合并(默认按行索引对齐)**的方法。它主要用于基于索引的连接操作,类似于 SQL 中的 JOIN 操作。
📌 方法签名
DataFrame.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False, validate=None)
🔧 参数说明:
参数 | 说明 |
---|
other | 另一个 DataFrame 或 Series,用于合并的数据源 |
on | 指定用于连接的列名(而不是使用索引),可以是单个列名或列表 |
how | 连接方式,默认 'left' ,可选 'inner' , 'outer' , 'right' |
lsuffix | 左边 DataFrame 的重复列名后缀 |
rsuffix | 右边 DataFrame 的重复列名后缀 |
sort | 是否对结果按索引排序,默认 False |
validate | 验证连接类型,如 'one_to_one' , 'one_to_many' 等 |
✅ 返回值
- 返回一个新的 DataFrame,包含两个 DataFrame 合并后的数据。
🧪 示例代码及结果
示例 1:默认按索引左连接(how='left'
)
import pandas as pd
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
}, index=['K0', 'K1', 'K2'])
df2 = pd.DataFrame({
'C': ['C0', 'C1', 'C3'],
'D': ['D0', 'D1', 'D3']
}, index=['K0', 'K1', 'K3'])
result = df1.join(df2)
print(result)
输出:
A B C D
K0 A0 B0 C0 D0
K1 A1 B1 C1 D1
K2 A2 B2 NaN NaN
示例 2:内连接(how='inner'
)
result = df1.join(df2, how='inner')
print(result)
输出:
A B C D
K0 A0 B0 C0 D0
K1 A1 B1 C1 D1
示例 3:外连接(how='outer'
)
result = df1.join(df2, how='outer')
print(result)
输出:
A B C D
K0 A0 B0 C0 D0
K1 A1 B1 C1 D1
K2 A2 B2 NaN NaN
K3 NaN NaN C3 D3
示例 4:指定连接列(on=
)
df1.reset_index(inplace=True)
df2.reset_index(inplace=True)
result = df1.join(df2.set_index('index'), on='index')
print(result)
输出:
index A B C D
0 K0 A0 B0 C0 D0
1 K1 A1 B1 C1 D1
2 K2 A2 B2 NaN NaN
示例 5:处理列名冲突(lsuffix
, rsuffix
)
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'C': [7, 8]})
result = df1.join(df2, lsuffix='_left', rsuffix='_right')
print(result)
输出:
A_left B A_right C
0 1 3 5 7
1 2 4 6 8
🧠 应用场景
场景 | 说明 |
---|
数据合并 | 将多个来源的数据通过索引或键合并 |
特征拼接 | 在机器学习中拼接不同特征集 |
补全缺失数据 | 用另一个 DataFrame 补充当前数据中的缺失字段 |
时间序列对齐 | 按时间索引合并多个指标 |
多表关联分析 | 类似 SQL 的 LEFT JOIN、INNER JOIN 分析 |
⚠️ 注意事项
- 默认使用索引进行连接;
- 若使用
on=
,则需确保该列为当前 DataFrame 的列; - 若列名冲突,必须指定
lsuffix
和 rsuffix
; join()
支持多个 DataFrame 合并,例如 df.join([df1, df2, df3])
;- 性能上比
merge()
更适合基于索引的连接。
✅ 对比 join()
vs merge()
特性 | join() | merge() |
---|
默认连接方式 | 基于索引 | 基于列 |
更适合 | 添加额外列 | 复杂的 SQL 式连接 |
支持多个 DataFrame | ✅ | ❌(只能两表) |
支持 on= | ✅ | ✅ |
支持 suffixes | ✅(lsuffix , rsuffix ) | ✅(suffixes=('_x','_y') ) |
更简洁 | ✅ | ❌ |
你可以根据是否基于索引、是否需要链式添加多个表来选择使用 join()
或 merge()
。