Python案例如何用Pandas做数据合并列

wen python案例 2

本文目录导读:

Python案例如何用Pandas做数据合并列

  1. 直接合并列(concat方法)
  2. 基于键的合并(merge方法)
  3. 使用join方法
  4. 复杂的实际案例
  5. 性能优化建议

我来详细介绍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

在处理大量数据时,合理设置索引和使用正确的连接类型可以显著提升性能。

抱歉,评论功能暂时关闭!