Skip to content

数据合并

数据合并是将多个数据集组合在一起的操作,Pandas 提供了多种合并方式。

纵向合并

python
import pandas as pd

df1 = pd.DataFrame({
    '姓名': ['张三', '李四'],
    '年龄': [25, 30]
})

df2 = pd.DataFrame({
    '姓名': ['王五', '赵六'],
    '年龄': [35, 28]
})

# 纵向合并
df_concat = pd.concat([df1, df2], ignore_index=True)
print(df_concat)

横向合并

python
df1 = pd.DataFrame({
    '姓名': ['张三', '李四', '王五'],
    '年龄': [25, 30, 35]
})

df2 = pd.DataFrame({
    '姓名': ['张三', '李四', '王五'],
    '城市': ['北京', '上海', '广州']
})

# 横向合并
df_concat = pd.concat([df1, df2], axis=1)
print(df_concat)

数据库风格的合并

内连接

python
df1 = pd.DataFrame({
    '员工ID': ['A001', 'A002', 'A003'],
    '姓名': ['张三', '李四', '王五']
})

df2 = pd.DataFrame({
    '员工ID': ['A001', 'A002', 'A004'],
    '部门': ['技术', '销售', '市场']
})

# 内连接(只保留两边都有的)
df_merge = pd.merge(df1, df2, on='员工ID', how='inner')
print(df_merge)

左连接

python
# 左连接(保留左边所有数据)
df_merge = pd.merge(df1, df2, on='员工ID', how='left')
print(df_merge)

右连接

python
# 右连接(保留右边所有数据)
df_merge = pd.merge(df1, df2, on='员工ID', how='right')
print(df_merge)

外连接

python
# 外连接(保留所有数据)
df_merge = pd.merge(df1, df2, on='员工ID', how='outer')
print(df_merge)

多键合并

python
df1 = pd.DataFrame({
    '姓名': ['张三', '张三', '李四'],
    '年份': [2023, 2024, 2023],
    '销售额': [100, 120, 80]
})

df2 = pd.DataFrame({
    '姓名': ['张三', '张三', '李四'],
    '年份': [2023, 2024, 2023],
    '目标': [90, 110, 85]
})

# 多键合并
df_merge = pd.merge(df1, df2, on=['姓名', '年份'])
print(df_merge)

处理重复列名

python
df1 = pd.DataFrame({
    'ID': [1, 2],
    '值': [100, 200]
})

df2 = pd.DataFrame({
    'ID': [1, 2],
    '值': [300, 400]
})

# 添加后缀区分
df_merge = pd.merge(df1, df2, on='ID', suffixes=('_左', '_右'))
print(df_merge)

索引合并

python
df1 = pd.DataFrame({
    '姓名': ['张三', '李四']
}, index=[1, 2])

df2 = pd.DataFrame({
    '部门': ['技术', '销售']
}, index=[1, 2])

# 按索引合并
df_merge = pd.merge(df1, df2, left_index=True, right_index=True)
print(df_merge)

# 或使用join
df_join = df1.join(df2)
print(df_join)

追加数据

python
df1 = pd.DataFrame({
    'A': [1, 2],
    'B': [3, 4]
})

df2 = pd.DataFrame({
    'A': [5, 6],
    'B': [7, 8]
})

# 追加数据
df_appended = df1._append(df2, ignore_index=True)
print(df_appended)

数据合并是数据处理中的常见操作,选择合适的合并方式可以高效地整合数据。