Pandas 合并两个 DataFrame

Pandas 合并两个 DataFrame

参考:pandas concat two dataframes

Pandas 是一个强大的 Python 数据分析库,它提供了大量的功能来操作和分析数据。在数据分析的过程中,经常需要将不同的数据集合并在一起,以便进行更全面的分析。本文将详细介绍如何使用 Pandasconcat 函数来合并两个 DataFrame。

1. Pandas concat 函数简介

concat 函数是 Pandas 中用于合并两个或多个 pandas 对象的主要函数之一。该函数不仅可以合并行,也可以合并列,非常灵活。基本语法如下:

pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)
  • objs: 一个序列或映射,这里是要合并的 DataFrame 或 Series。
  • axis: {0/’index’, 1/’columns’},默认为 0。如果是 0,将在索引(行)上进行合并;如果是 1,则在列上进行合并。
  • join: {‘inner’, ‘outer’},默认为 ‘outer’。指定合并的方式,外连接或内连接。
  • ignore_index: 布尔值,默认为 False。如果为 True,则不使用索引值,而是创建一个新的索引。
  • keys: 序列,默认为 None。如果传递了序列,则创建一个多级索引(层次化索引)。
  • verify_integrity: 布尔值,默认为 False。检查新连接的轴是否包含重复项。
  • sort: 布尔值,默认为 False。在合并时根据非连接轴排序。

2. 示例代码

示例 1: 基本的行合并

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3'],
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']
}, index=[0, 1, 2, 3])

df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7'],
    'C': ['C4', 'C5', 'C6', 'C7'],
    'D': ['D4', 'D5', 'D6', 'D7']
}, index=[4, 5, 6, 7])

# 使用 concat 合并 DataFrame
result = pd.concat([df1, df2])
print(result)

Output:

Pandas 合并两个 DataFrame

示例 2: 使用 ignore_index 选项

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3'],
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']
}, index=[0, 1, 2, 3])

df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7'],
    'C': ['C4', 'C5', 'C6', 'C7'],
    'D': ['D4', 'D5', 'D6', 'D7']
}, index=[4, 5, 6, 7])

# 使用 concat 合并 DataFrame 并忽略原有索引
result = pd.concat([df1, df2], ignore_index=True)
print(result)

Output:

Pandas 合并两个 DataFrame

示例 3: 列合并

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']
})

# 使用 concat 合并 DataFrame,沿着列方向
result = pd.concat([df1, df2], axis=1)
print(result)

Output:

Pandas 合并两个 DataFrame

示例 4: 使用 keys 创建多级索引

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7']
})

# 使用 concat 合并 DataFrame,并指定 keys 创建多级索引
result = pd.concat([df1, df2], keys=['pandasdataframe.com1', 'pandasdataframe.com2'])
print(result)

Output:

Pandas 合并两个 DataFrame

示例 5: 内连接

import pandas as pd

# 创建两个 DataFrame,部分列不同
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7'],
    'C': ['C4', 'C5', 'C6', 'C7']
})

# 使用 concat 合并 DataFrame,进行内连接
result = pd.concat([df1, df2], join='inner')
print(result)

Output:

Pandas 合并两个 DataFrame

示例 6: 检查合并后的数据完整性

import pandas as pd

# 创建两个 DataFrame,有重复索引
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
}, index=[0, 1, 2, 3])

df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7']
}, index=[2, 3, 4, 5])

# 使用 concat 合并 DataFrame,并检查新连接的轴是否包含重复项
result = pd.concat([df1, df2], verify_integrity=True)
print(result)

示例 7: 排序非连接轴

import pandas as pd

# 创建两个 DataFrame,列名不同
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']
})

# 使用 concat 合并 DataFrame,并对非连接轴进行排序
result = pd.concat([df1, df2], sort=True)
print(result)

Output:

Pandas 合并两个 DataFrame

示例 8: 复制数据

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7']
})

# 使用 concat 合并 DataFrame,不复制数据
result = pd.concat([df1, df2], copy=False)
print(result)

Output:

Pandas 合并两个 DataFrame

示例 9: 使用自定义索引

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
}, index=[0, 1, 2, 3])

df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7']
}, index=[4, 5, 6, 7])

# 使用 concat 合并 DataFrame,并使用自定义索引
result = pd.concat([df1, df2], keys=['pandasdataframe.com Group 1', 'pandasdataframe.com Group 2'])
print(result)

Output:

Pandas 合并两个 DataFrame

示例 10: 合并具有不同列的 DataFrame

import pandas as pd

# 创建两个 DataFrame,列名部分不同
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'B': ['B4', 'B5', 'B6', 'B7'],
    'C': ['C4', 'C5', 'C6', 'C7']
})

# 使用 concat 合并 DataFrame,外连接
result = pd.concat([df1, df2], join='outer')
print(result)

Output:

Pandas 合并两个 DataFrame

示例 11: 合并时保留原有 DataFrame 的索引

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
}, index=[0, 1, 2, 3])

df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7']
}, index=[4, 5, 6, 7])

# 使用 concat 合并 DataFrame,保留原有索引
result = pd.concat([df1, df2], ignore_index=False)
print(result)

Output:

Pandas 合并两个 DataFrame

示例 12: 创建多级列索引

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'C': ['C0', 'C1', 'C2', 'C3'],
    'D': ['D0', 'D1', 'D2', 'D3']
})

# 使用 concat 合并 DataFrame,并创建多级列索引
result = pd.concat([df1, df2], axis=1, keys=['pandasdataframe.com Group 1', 'pandasdataframe.com Group 2'])
print(result)

Output:

Pandas 合并两个 DataFrame

示例 13: 合并时使用不同的连接方式

import pandas as pd

# 创建两个 DataFrame
df1 = pd.DataFrame({
    'A': ['A0', 'A1', 'A2', 'A3'],
    'B': ['B0', 'B1', 'B2', 'B3']
})

df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6', 'A7'],
    'B': ['B4', 'B5', 'B6', 'B7'],
    'C': ['C4', 'C5', 'C6', 'C7']
})

# 使用 concat 合并 DataFrame,内连接和外连接
result_inner = pd.concat([df1, df2], join='inner')
print(result_inner)
result_outer = pd.concat([df1, df2], join='outer')
print(result_outer)

Output:

Pandas 合并两个 DataFrame

以上示例展示了如何使用 Pandas 的 concat 函数来合并两个 DataFrame。通过不同的参数设置,可以实现多种数据合并的需求,从而为数据分析提供更多的灵活性和功能。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程