Pandas concat vs append

Pandas concat vs append

参考:pandas concat vs append

在数据分析和数据处理中,经常需要将多个数据集合并为一个大的数据集。Pandas库提供了多种方式来合并数据,其中最常用的是concat()append()函数。这两个函数虽然都可以用来合并数据,但它们在使用方法和性能上有所不同。本文将详终介绍concat()append()的用法,并通过示例代码展示它们的具体应用。

1. pandas concat() 函数

concat()函数是pandas中用于合并两个或多个pandas对象的主要函数。它不仅可以合并行,也可以合并列,提供了极高的灵活性。

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对象的列表或字典。下面是一个简单的示例:

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

1.2 沿不同轴合并

concat()可以通过axis参数来控制合并的轴向。默认为0,表示纵向合并(增加行)。如果设置为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], axis=1)
print(result)

Output:

Pandas concat vs append

1.3 使用keys创建多层索引

通过keys参数,concat()可以在合并时创建多层索引,这对于识别原始数据来源非常有用。下面是一个使用keys的示例:

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], keys=['x', 'y'])
print(result)

Output:

Pandas concat vs append

1.4 处理索引重复

concat()在合并时默认保留原始对象的索引,即使这会导致索引重复。可以通过设置ignore_index=True来生成新的整数索引。下面是一个处理索引重复的示例:

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], ignore_index=True)
print(result)

Output:

Pandas concat vs append

2. pandas append() 函数

append()函数是一个便捷的方法,用于将一行或多行追加到DataFrame上。它是concat()的特例,主要用于纵向合并。

2.1 基本用法

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

df._append(other, ignore_index=False, verify_integrity=False, sort=False)

其中,other可以是另一个DataFrame或者是一个能够转换为DataFrame的字典或列表。下面是一个简单的示例:

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

# 创建一个新的DataFrame
df3 = pd.DataFrame({
    'A': ['A8', 'A9', 'A10', 'A11'],
    'B': ['B8', 'B9', 'B10', 'B11'],
    'C': ['C8', 'C9', 'C10', 'C11'],
    'D': ['D8', 'D9', 'D10', 'D11']
}, index=[8, 9, 10, 11])

# 使用append追加DataFrame
result = df1._append(df3)
print(result)

Output:

Pandas concat vs append

2.2 忽略原始索引

concat()类似,append()也可以通过设置ignore_index=True来忽略原始的索引值,生成新的整数索引。下面是一个忽略原始索引的示例:

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

# 创建一个新的DataFrame
df3 = pd.DataFrame({
    'A': ['A8', 'A9', 'A10', 'A11'],
    'B': ['B8', 'B9', 'B10', 'B11'],
    'C': ['C8', 'C9', 'C10', 'C11'],
    'D': ['D8', 'D9', 'D10', 'D11']
}, index=[8, 9, 10, 11])

result = df1._append(df3, ignore_index=True)
print(result)

Output:

Pandas concat vs append

3. 性能比较

在处理大量数据时,concat()通常比append()性能更好。这是因为append()每次调用都会创建一个新的DataFrame,如果在一个循环中多次使用append(),这将导致大量的内存分配和复制。相反,concat()可以一次性处理所有的数据合并操作,从而提高效率。

4. 总结

虽然concat()append()都可以用于合并数据,但它们各有优势和适用场景。concat()提供了更高的灵活性和更好的性能,适用于复杂的数据合并任务。而append()则更适用于快速简单的纵向数据追加。在实际应用中,应根据具体需求选择合适的方法。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程