在pandas中拼接dataframe是数据整合的核心操作,以下是一些拼接方法及代码示例

1.concat():沿轴拼接多个dataframe
适用于结构相似的数据集(相同列或相同索引),支持纵向(行)或横向(列)拼接。
参数关键点
axis=0(默认):纵向拼接(增加行);axis=1:横向拼接(增加列)。join='outer':保留所有行列(缺值填nan);join='inner':仅保留共有行列。ignore_index=true:重置索引,避免重复。keys:添加分层索引,标记来源。
代码示例
import pandas as pd
# 纵向拼接(行追加)
df1 = pd.dataframe({'a': ['a0', 'a1'], 'b': ['b0', 'b1']})
df2 = pd.dataframe({'a': ['a2', 'a3'], 'b': ['b2', 'b3']})
result_vertical = pd.concat([df1, df2], ignore_index=true)
结果如下:
| a | b | |
|---|---|---|
| 0 | a0 | b0 |
| 1 | a1 | b1 |
| 2 | a2 | b2 |
| 3 | a3 | b3 |
# 横向拼接(列合并)
df3 = pd.dataframe({'c': ['c0', 'c1'], 'd': ['d0', 'd1']}, index=[0,1])
result_horizontal = pd.concat([df1, df3], axis=1)
结果如下:
| a | b | c | d | |
|---|---|---|---|---|
| 0 | a0 | b0 | c0 | d0 |
| 1 | a1 | b1 | c1 | d1 |
2.merge():基于键值合并(类似sql join)
适用于关联不同结构的数据集,通过共享列(键)连接。
参数关键点
how:连接方式(inner、left、right、outer)。on:指定连接键列名;left_on/right_on:左右表键名不同时使用。left_index/right_index=true:用索引作为连接键。
代码示例
# 内连接(保留共有键)
left = pd.dataframe({'key': ['k0', 'k1'], 'a': ['a0', 'a1']})
right = pd.dataframe({'key': ['k0', 'k2'], 'b': ['b0', 'b2']})
result_inner = pd.merge(left, right, on='key', how='inner')
结果如下:
| key | a | b | |
|---|---|---|---|
| 0 | k0 | a0 | b0 |
# 外连接(保留所有键,缺值填nan) result_outer = pd.merge(left, right, on='key', how='outer') result_outer
结果如下:
| key | a | b | |
|---|---|---|---|
| 0 | k0 | a0 | b0 |
| 1 | k1 | a1 | nan |
| 2 | k2 | nan | b2 |
3.join():基于索引快速连接
merge的简化版,默认按索引拼接,适合索引对齐的场景。
参数关键点
how:连接方式(默认左连接)。lsuffix/rsuffix:左右表列名冲突时添加后缀。
代码示例
left_df = pd.dataframe({'value': [1, 2]}, index=['a', 'b'])
right_df = pd.dataframe({'value': [7, 8]}, index=['a', 'c'])
joined = left_df.join(right_df, how='inner', lsuffix='_left', rsuffix='_right')
joined
结果如下:
| value_left | value_right | |
|---|---|---|
| a | 1 | 7 |
4.combine_first():填充缺失值
用第二个dataframe的非空值补全第一个dataframe的nan,适合数据补全。
代码示例
df1 = pd.dataframe({'a': [1, none, 3], 'b': [4, 5, none]}, index=['x', 'y', 'z'])
df2 = pd.dataframe({'a': [none, 10, 11], 'b': [7, 8, 9]}, index=['y', 'z', 'w'])
filled = df1.combine_first(df2)
filled
结果如下:
| a | b | |
|---|---|---|
| w | 11.0 | 9.0 |
| x | 1.0 | 4.0 |
| y | nan | 5.0 |
| z | 3.0 | 8.0 |
性能与场景对比
| 方法 | 适用场景 | 性能优势 |
|---|---|---|
concat() | 同构数据批量拼接(行/列扩展) | ⭐⭐⭐⭐(高效批处理) |
merge() | 异构数据关联(类似sql join) | ⭐⭐⭐(灵活但稍慢) |
join() | 索引对齐的快速合并 | ⭐⭐⭐⭐(索引优化) |
combine_first() | 缺失值填充(非拼接主导) | ⭐⭐ |
高效建议:
- 批量纵向拼接优先用
concat(ignore_index=true); - 关联查询用
merge并明确指定on键; - 避免已弃用的
append(),用concat替代。
通过以上方法,可灵活应对dataframe拼接需求,平衡效率与功能。
到此这篇关于pandas dataframe进行数据拼接方法详解的文章就介绍到这了,更多相关pandas dataframe数据拼接内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论