Pandas concat vs append

Pandas concat vs append

参考:pandas concat vs append

在数据处理和分析中,经常需要将多个数据集合并为一个大的数据集。PandasPython 中一个强大的数据处理库,它提供了多种数据合并的方法,其中最常用的是 concat()append()。本文将详细介绍这两种方法的使用场景、语法和区别,并通过多个示例来展示如何在实际中应用这些方法。

1. pandas concat() 函数

concat() 函数是 pandas 中用于合并两个或多个 pandas 对象的函数。它不仅可以合并 Series 和 DataFrame 对象,还可以沿着某个轴进行合并。

1.1 基本用法

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 对象的列表或字典。现在,我们通过一个示例来展示如何使用 concat() 来合并两个 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])

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

Output:

Pandas concat vs append

1.2 参数详解

  • axis:默认为0,表示沿着索引轴进行合并,如果设置为1,则沿着列轴合并。
  • join:默认为’outer’,表示执行外连接,也可以设置为’inner’执行内连接。
  • ignore_index:如果设置为True,则不使用原来的索引标签。

示例代码 2

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 vs append

2. pandas append() 函数

append() 函数是另一种用于合并两个 DataFrame 的方法。它是 concat() 函数的简化版,主要用于沿着索引轴(axis=0)合并。

2.1 基本用法

append() 函数的基本语法如下:

DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=False)

其中,other 可以是一个 DataFrame 或者多个 DataFrame 组成的列表。下面是一个使用 append() 的示例。

示例代码 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 = df1._append(df2, ignore_index=True)
print(result)

Output:

Pandas concat vs append

2.2 参数详解

  • ignore_index:同 concat(),用于是否忽略原有的索引。
  • verify_integrity:如果设置为True,则会检查新生成的 DataFrame 是否包含重复的索引。

示例代码 4

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 = df1._append(df2, ignore_index=True, verify_integrity=True)
print(result)

Output:

Pandas concat vs append

3. concat() vs append()

虽然 concat()append() 都可以用于合并数据,但它们之间存在一些差异。concat() 提供了更多的灵活性,例如可以沿着不同的轴进行合并,支持多种类型的合并方式(如外连接和内连接)。而 append() 主要是 concat() 的简化版,主要用于快速沿着索引轴合并数据。

3.1 性能考虑

当涉及到大规模数据处理时,concat() 的性能通常优于 append(),因为 append() 会在每次调用时创建一个新的 DataFrame,这在循环中尤其低效。因此,推荐在处理大数据集时使用 concat()

示例代码 5

import pandas as pd

# 创建大量 DataFrame
data_frames = [pd.DataFrame({
    'A': [f'A{i}', f'A{i+1}'],
    'B': [f'B{i}', f'B{i+1}']
}) for i in range(1000)]

# 使用 concat
result_concat = pd.concat(data_frames)
print(result_concat)

# 使用 append
result_append = pd.DataFrame()
for df in data_frames:
    result_append = result_append._append(df, ignore_index=True)
print(result_append)

Output:

Pandas concat vs append

3.2 使用场景

  • 使用 concat():当需要合并多个 DataFrame,并且可能需要沿着不同的轴进行合并或执行不同类型的连接时。
  • 使用 append():当只需要快速地沿着索引轴向 DataFrame 添加少量数据时。

总结

在 pandas 中,concat()append() 都是非常有用的函数,用于合并数据。选择哪一个主要取决于具体的需求和性能考虑。希望通过本文的介绍,你可以更好地理解这两个函数的用法和它们之间的区别。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程