Pandas concat axis 详解

Pandas concat axis 详解

参考:pandas concat axis

在数据分析和数据处理中,经常需要将多个数据集合并为一个更大的数据集。Pandas 提供了多种方式来合并数据,其中 concat 函数是一个非常强大的工具,它可以沿着一定的轴将多个 DataFrame 或 Series 合并在一起。本文将详细介绍 concat 函数的使用方法,特别是如何通过 axis 参数控制合并的方向。

1. pandas concat 基础

在深入了解 axis 参数之前,我们首先需要了解 concat 函数的基本用法。concat 函数的基本语法如下:

pandas.concat(objs, axis=0, join='outer', ignore_index=False, keys=None, levels=None, names=None, verify_integrity=False, sort=False, copy=True)

其中,objs 是一个列表或字典,包含了要合并的 pandas 对象(DataFrame 或 Series)。axis 参数默认为 0,表示沿着索引(行)方向进行合并,如果设置为 1,则沿着列方向合并。

示例代码 1:基本的行合并

import pandas as pd

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])

result = pd.concat([df1, df2])
print(result)

Output:

Pandas concat axis 详解

示例代码 2:基本的列合并

import pandas as pd

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"]
})

result = pd.concat([df1, df2], axis=1)
print(result)

Output:

Pandas concat axis 详解

2. 使用 axis 参数

axis 参数是 concat 函数中一个非常重要的参数,它决定了合并的方向。axis=0 表示沿着行方向合并,而 axis=1 则表示沿着列方向合并。

示例代码 3:沿行方向合并,忽略原有索引

import pandas as pd

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"]
})

result = pd.concat([df1, df2], ignore_index=True)
print(result)

Output:

Pandas concat axis 详解

示例代码 4:沿列方向合并,保留原有索引

import pandas as pd

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

df2 = pd.DataFrame({
    "C": ["C0", "C1", "C2", "C3"],
    "D": ["D0", "D1", "D2", "D3"]
}, index=[0, 1, 2, 3])

result = pd.concat([df1, df2], axis=1)
print(result)

Output:

Pandas concat axis 详解

3. 处理索引问题

在使用 concat 进行数据合并时,经常会遇到索引不一致的问题。Pandas 提供了多种方式来处理这些问题,例如使用 ignore_index 参数或者通过 keys 参数来创建多级索引。

示例代码 5:使用 keys 参数创建多级索引

import pandas as pd

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"]
})

result = pd.concat([df1, df2], keys=['x', 'y'])
print(result)

Output:

Pandas concat axis 详解

示例代码 6:忽略原有索引并创建新索引

import pandas as pd

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"]
})

result = pd.concat([df1, df2], ignore_index=True)
print(result)

Output:

Pandas concat axis 详解

4. 处理列不一致问题

当合并的 DataFrame 列不一致时,concat 函数提供了 join 参数来指定如何处理这些列。join='outer' 会保留所有的列,而 join='inner' 只会保留共有的列。

示例代码 7:列不一致时使用外连接

import pandas as pd

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"]
})

result = pd.concat([df1, df2], join='outer')
print(result)

Output:

Pandas concat axis 详解

示例代码 8:列不一致时使用内连接

import pandas as pd

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"]
})

result = pd.concat([df1, df2], join='inner')
print(result)

Output:

Pandas concat axis 详解

5. 验证数据完整性

在合并大量数据时,有时需要验证合并后的数据完整性,以确保没有由于合并操作引起的数据丢失或重复。verify_integrity 参数可以用来检查合并后的 DataFrame 是否存在重复的索引。

示例代码 9:验证数据完整性

import pandas as pd

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"]
})

try:
    result = pd.concat([df1, df2], verify_integrity=True)
    print(result)
except ValueError as e:
    print("ValueError:", e)

Output:

Pandas concat axis 详解

6. 排序列

在合并时,如果 axis=1,即列合并,可能会导致列的顺序不符合预期。sort 参数可以用来控制合并后的列的排序。

示例代码 10:合并时排序列

import pandas as pd

df1 = pd.DataFrame({
    "B": ["B0", "B1", "B2", "B3"],
    "A": ["A0", "A1", "A2", "A3"]
})

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

result = pd.concat([df1, df2], axis=1, sort=True)
print(result)

Output:

Pandas concat axis 详解

7. 复制数据

在某些情况下,为了保护原始数据不被修改,concat 函数提供了 copy 参数来控制是否复制数据,而不是直接使用原始对象。

示例代码 11:控制数据复制

import pandas as pd

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"]
})

result = pd.concat([df1, df2], copy=False)
print(result)

Output:

Pandas concat axis 详解

8. 总结

在本文中,我们详细介绍了 Pandas 中的 concat 函数,特别是 axis 参数的使用,以及如何通过其他参数来控制合并的行为。通过上述示例,我们可以看到 concat 函数在数据处理中的灵活性和强大功能。无论是在进行简单的数据拼接,还是处理复杂的数据合并需求,concat 都能提供有效的解决方案。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程