本文目录导读:

我来详细介绍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
在处理大量数据时,合理设置索引和使用正确的连接类型可以显著提升性能。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播