本文目录导读:

我来详细介绍Python中使用Pandas进行数据列合并的几种常用方法。
直接合并列(concat方法)
水平合并(按列合并)
import pandas as pd
# 创建示例数据
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
})
df2 = pd.DataFrame({
'C': [7, 8, 9],
'D': [10, 11, 12]
})
# 水平合并列
result = pd.concat([df1, df2], axis=1)
print(result)
输出:
A B C D
0 1 4 7 10
1 2 5 8 11
2 3 6 9 12
基于键的合并(merge方法)
内连接 (inner join)
df1 = pd.DataFrame({
'key': ['A', 'B', 'C'],
'value1': [1, 2, 3]
})
df2 = pd.DataFrame({
'key': ['A', 'B', 'D'],
'value2': [4, 5, 6]
})
# 内连接
result = pd.merge(df1, df2, on='key', how='inner')
print(result)
左连接 (left join)
result = pd.merge(df1, df2, on='key', how='left') print(result)
右连接 (right join)
result = pd.merge(df1, df2, on='key', how='right') print(result)
外连接 (outer join)
result = pd.merge(df1, df2, on='key', how='outer') print(result)
使用join方法
基于索引合并
df1 = pd.DataFrame({
'A': [1, 2, 3],
'B': [4, 5, 6]
}, index=['x', 'y', 'z'])
df2 = pd.DataFrame({
'C': [7, 8, 9],
'D': [10, 11, 12]
}, index=['x', 'y', 'z'])
result = df1.join(df2)
print(result)
指定连接类型
# 左连接 result = df1.join(df2, how='left') # 外连接 result = df1.join(df2, how='outer')
复杂的实际案例
案例1:合并多个DataFrame
import pandas as pd
import numpy as np
# 创建多个数据表
orders = pd.DataFrame({
'order_id': [1, 2, 3, 4],
'customer_id': ['C001', 'C002', 'C003', 'C001'],
'amount': [100, 200, 150, 300]
})
customers = pd.DataFrame({
'customer_id': ['C001', 'C002', 'C003', 'C004'],
'name': ['张三', '李四', '王五', '赵六'],
'city': ['北京', '上海', '广州', '深圳']
})
products = pd.DataFrame({
'order_id': [1, 2, 3, 4],
'product': ['手机', '电脑', '平板', '耳机']
})
# 链式合并
result = orders.merge(customers, on='customer_id', how='left') \
.merge(products, on='order_id', how='left')
print(result)
案例2:处理重复列名
df1 = pd.DataFrame({
'id': [1, 2, 3],
'name': ['A', 'B', 'C'],
'value': [10, 20, 30]
})
df2 = pd.DataFrame({
'id': [1, 2, 3],
'name': ['X', 'Y', 'Z'],
'score': [85, 90, 95]
})
# 使用suffixes参数处理重复列名
result = pd.merge(df1, df2, on='id', suffixes=('_left', '_right'))
print(result)
案例3:基于多个键合并
df1 = pd.DataFrame({
'key1': ['A', 'B', 'C'],
'key2': ['X', 'Y', 'Z'],
'value1': [1, 2, 3]
})
df2 = pd.DataFrame({
'key1': ['A', 'B', 'C'],
'key2': ['X', 'Y', 'W'],
'value2': [4, 5, 6]
})
result = pd.merge(df1, df2, on=['key1', 'key2'], how='outer')
print(result)
性能优化建议
使用设置索引提高性能
# 不推荐:多次合并时重复查找
result1 = pd.merge(df1, df2, on='key')
result2 = pd.merge(result1, df3, on='key')
# 推荐:先设置索引
df2_indexed = df2.set_index('key')
df3_indexed = df3.set_index('key')
result = df1.join([df2_indexed, df3_indexed], on='key')
处理大数据量
# 分块处理
chunksize = 10000
chunks = []
for chunk in pd.read_csv('large_file.csv', chunksize=chunksize):
merged_chunk = pd.merge(chunk, reference_df, on='key')
chunks.append(merged_chunk)
result = pd.concat(chunks)
| 方法 | 适用场景 | 特点 |
|---|---|---|
concat |
简单的横向合并 | 基于位置或索引 |
merge |
数据库风格的连接 | 灵活的连接条件 |
join |
基于索引的合并 | 适合索引对齐 |
append |
纵向添加行 | 旧版本可用 |
选择合适的方法取决于你的具体需求:
- 简单的列追加用
concat - 需要多表关联用
merge - 索引对齐用
join
在处理大量数据时,合理设置索引和使用正确的连接类型可以显著提升性能。