Pandas concat 示例

Pandas concat 示例

参考:pandas concat example

Pandas 是一个强大的 Python 数据分析库,它提供了大量的功能来处理和分析数据。其中,concat 函数是一个非常有用的工具,它可以用来合并两个或多个 pandas 数据结构。本文将详细介绍如何使用 pandas 的 concat 函数,包括多种不同的使用场景和示例代码。

1. 基本使用

concat 函数的基本用法是将两个或多个 DataFrame 或 Series 沿着某个轴合并。这里我们首先看一个简单的例子,合并两个 DataFrame。

示例代码 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 合并
result = pd.concat([df1, df2])
print(result)

Output:

Pandas concat 示例

2. 设置轴

在默认情况下,concat 是沿着 axis=0 进行合并,即纵向合并。但是,我们也可以设置 axis=1 来进行横向合并。

示例代码 2

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 合并
result = pd.concat([df1, df2], axis=1)
print(result)

Output:

Pandas concat 示例

3. 索引重置

在合并时,如果不希望保留原来的索引,可以使用 ignore_index=True 参数来重置索引。

示例代码 3

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 合并并重置索引
result = pd.concat([df1, df2], ignore_index=True)
print(result)

Output:

Pandas concat 示例

4. 处理重复列

在合并多个 DataFrame 时,如果存在重复的列名,Pandas 会保留所有列。我们可以通过设置 join 参数来控制如何处理这些列。

示例代码 4

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': ['C0', 'C1', 'C2', 'C3']
})

# 使用 concat 合并,只保留共有的列
result = pd.concat([df1, df2], join='inner')
print(result)

Output:

Pandas concat 示例

5. 使用 keys 创建多级索引

当我们合并多个 DataFrame 时,可以通过 keys 参数为每个 DataFrame 设置一个标签,这样合并后的 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']
})

# 使用 concat 合并,并设置多级索引
result = pd.concat([df1, df2], keys=['df1', 'df2'])
print(result)

Output:

Pandas concat 示例

6. 合并时使用不同的索引

在合并 DataFrame 时,如果各 DataFrame 的索引不同,我们可以通过设置 ignore_index=True 来统一重置索引,或者通过 keys 参数来保留原有的索引结构。

示例代码 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=[4, 5, 6, 7])

# 使用 concat 合并,并重置索引
result = pd.concat([df1, df2], ignore_index=True)
print(result)

Output:

Pandas concat 示例

7. 合并具有不同列的 DataFrame

当合并的 DataFrame 拥有不同的列时,我们可以选择保留所有列或只保留共有的列。这可以通过 join 参数来控制。

示例代码 7

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': ['C0', 'C1', 'C2', 'C3']
})

# 使用 concat 合并,保留所有列
result = pd.concat([df1, df2], join='outer')
print(result)

Output:

Pandas concat 示例

8. 使用 append 进行快速合并

除了 concat 函数外,Pandas 还提供了 append 方法,它是 concat 的简化版,专门用于纵向合并。

示例代码 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']
})

# 使用 append 方法合并
result = df1.append(df2, ignore_index=True)
print(result)

9. 处理具有相同列名但不同数据类型的 DataFrame

当合并的 DataFrame 具有相同的列名但列的数据类型不同时,Pandas 会尝试转换数据类型以匹配。如果转换失败,它会引发错误。我们可以通过确保数据类型一致或使用 dtype 参数来处理这种情况。

示例代码 9

import pandas as pd

# 创建两个 DataFrame,相同的列名但不同的数据类型
df1 = pd.DataFrame({
    'A': [1, 2, 3, 4],
    'B': [5.0, 6.0, 7.0, 8.0]
})

df2 = pd.DataFrame({
    'A': ['one', 'two', 'three', 'four'],
    'B': ['five', 'six', 'seven', 'eight']
})

# 使用 concat 合并,这里可能需要处理数据类型问题
result = pd.concat([df1, df2], ignore_index=True)
print(result)

Output:

Pandas concat 示例

10. 使用验证选项来检查合并的结果

Pandas 的 concat 函数提供了 verify_integrity 参数,当设置为 True 时,如果合并的结果中存在重复的索引,将会引发异常。这是一种检查数据完整性的好方法。

示例代码 10

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=[3, 4, 5, 6])

# 使用 concat 合并,并检查索引完整性
try:
    result = pd.concat([df1, df2], verify_integrity=True)
    print(result)
except ValueError as e:
    print("ValueError:", e)

Output:

Pandas concat 示例

11. 使用 sort 参数控制列的排序

在合并多个 DataFrame 时,如果它们包含不同的列,合并后的 DataFrame 默认会按照列名的字典顺序排序。我们可以通过设置 sort 参数来控制这一行为。

示例代码 11

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 合并,不排序列
result = pd.concat([df1, df2], sort=False)
print(result)

Output:

Pandas concat 示例

12. 处理缺失数据

在合并 DataFrame 时,如果某些列在某些 DataFrame 中不存在,则合并后的 DataFrame 中这些列的缺失部分将被填充为 NaN。我们可以通过填充策略来处理这些缺失数据。

示例代码 12

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'],
    'C': ['C4', 'C5', 'C6', 'C7']
})

# 使用 concat 合并,并处理缺失数据
result = pd.concat([df1, df2], sort=False).fillna('Missing')
print(result)

Output:

Pandas concat 示例

以上是 pandas concat 函数的详细介绍和多个实用的示例代码。通过这些示例,您可以了解如何在不同情况下使用 concat 来合并数据,并处理可能出现的各种问题。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程