Pandas 将一个 DataFrame 添加到另一个 DataFrame

Pandas 将一个 DataFrame 添加到另一个 DataFrame

参考:pandas append dataframe to another

在数据处理和分析中,经常需要将多个数据集合并为一个大的数据集。Pandas 是 Python 中一个强大的数据分析和处理库,它提供了多种方式来合并数据,其中 append() 函数是一个非常常用的方法来实现 DataFrame 的合并。本文将详细介绍如何使用 Pandas 的 append() 方法将一个 DataFrame 添加到另一个 DataFrame,包括不同的使用场景和示例代码。

1. 基本用法

append() 函数可以将一个 DataFrame 添加到另一个 DataFrame 的末尾。这里是一个基本的示例:

import pandas as pd

# 创建第一个DataFrame
df1 = pd.DataFrame({
    'A': ['A1', 'A2', 'A3'],
    'B': ['B1', 'B2', 'B3'],
    'C': ['C1', 'C2', 'C3']
}, index=[0, 1, 2])

# 创建第二个DataFrame
df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6'],
    'B': ['B4', 'B5', 'B6'],
    'C': ['C4', 'C5', 'C6']
}, index=[3, 4, 5])

# 使用append函数
result = df1._append(df2)
print(result)

Output:

Pandas 将一个 DataFrame 添加到另一个 DataFrame

2. 忽略索引

在默认情况下,append() 函数会保留原始 DataFrame 的索引,即使这会导致索引重复。如果希望在合并后创建一个新的整数索引,可以设置 ignore_index=True

import pandas as pd

# 创建第一个DataFrame
df1 = pd.DataFrame({
    'A': ['A1', 'A2', 'A3'],
    'B': ['B1', 'B2', 'B3'],
    'C': ['C1', 'C2', 'C3']
}, index=[0, 1, 2])

# 创建第二个DataFrame
df2 = pd.DataFrame({
    'A': ['A4', 'A5', 'A6'],
    'B': ['B4', 'B5', 'B6'],
    'C': ['C4', 'C5', 'C6']
}, index=[3, 4, 5])

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

Output:

Pandas 将一个 DataFrame 添加到另一个 DataFrame

3. 添加单行数据

append() 也可以用来添加单行数据。为此,需要将单行数据构造成一个字典或者 Series,并将其转换为 DataFrame。

import pandas as pd

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

df2 = pd.DataFrame({
    'A': ['A3', 'A4', 'A5'],
    'B': ['B3', 'B4', 'B5']
}, index=[3, 4, 5])

new_row = pd.Series({'A': 'A7', 'B': 'B7', 'C': 'C7'}, name='6')
result = df1._append(new_row.to_frame().T)
print(result)

Output:

Pandas 将一个 DataFrame 添加到另一个 DataFrame

4. 合并多个 DataFrame

可以连续使用 append() 方法来合并多个 DataFrame。

import pandas as pd

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

df2 = pd.DataFrame({
    'A': ['A3', 'A4', 'A5'],
    'B': ['B3', 'B4', 'B5']
}, index=[3, 4, 5])

df3 = pd.DataFrame({
    'A': ['A8', 'A9', 'A10'],
    'B': ['B8', 'B9', 'B10'],
    'C': ['C8', 'C9', 'C10']
}, index=[6, 7, 8])

result = df1._append(df2).append(df3)
print(result)

5. 使用列表合并多个 DataFrame

如果有多个 DataFrame 需要合并,可以先将它们放入一个列表,然后使用 pd.concat() 方法,这通常比多次使用 append() 更高效。

import pandas as pd

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

df2 = pd.DataFrame({
    'A': ['A3', 'A4', 'A5'],
    'B': ['B3', 'B4', 'B5']
}, index=[3, 4, 5])

df3 = pd.DataFrame({
    'A': ['A8', 'A9', 'A10'],
    'B': ['B8', 'B9', 'B10'],
    'C': ['C8', 'C9', 'C10']
}, index=[6, 7, 8])

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

Output:

Pandas 将一个 DataFrame 添加到另一个 DataFrame

6. 处理不匹配的列

当两个 DataFrame 拥有不完全相同的列时,append() 默认会保留所有列,并在缺失的地方填充 NaN。

import pandas as pd

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

df2 = pd.DataFrame({
    'A': ['A3', 'A4', 'A5'],
    'B': ['B3', 'B4', 'B5']
}, index=[3, 4, 5])

df3 = pd.DataFrame({
    'A': ['A8', 'A9', 'A10'],
    'B': ['B8', 'B9', 'B10'],
    'C': ['C8', 'C9', 'C10']
}, index=[6, 7, 8])

df4 = pd.DataFrame({
    'A': ['A11', 'A12'],
    'D': ['D11', 'D12']
}, index=[9, 10])

result = df1._append(df4)
print(result)

Output:

Pandas 将一个 DataFrame 添加到另一个 DataFrame

7. 指定排序列

在合并时,可以通过 sort=False 参数来控制是否对列进行排序。

import pandas as pd

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

df2 = pd.DataFrame({
    'A': ['A3', 'A4', 'A5'],
    'B': ['B3', 'B4', 'B5']
}, index=[3, 4, 5])

df3 = pd.DataFrame({
    'A': ['A8', 'A9', 'A10'],
    'B': ['B8', 'B9', 'B10'],
    'C': ['C8', 'C9', 'C10']
}, index=[6, 7, 8])

df4 = pd.DataFrame({
    'A': ['A11', 'A12'],
    'D': ['D11', 'D12']
}, index=[9, 10])

result = df1._append(df4, sort=False)
print(result)

Output:

Pandas 将一个 DataFrame 添加到另一个 DataFrame

8. 使用 ignore_indexsort 组合

可以组合使用 ignore_indexsort 参数来同时控制索引和列的排序。

import pandas as pd

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

df2 = pd.DataFrame({
    'A': ['A3', 'A4', 'A5'],
    'B': ['B3', 'B4', 'B5']
}, index=[3, 4, 5])

df3 = pd.DataFrame({
    'A': ['A8', 'A9', 'A10'],
    'B': ['B8', 'B9', 'B10'],
    'C': ['C8', 'C9', 'C10']
}, index=[6, 7, 8])

df4 = pd.DataFrame({
    'A': ['A11', 'A12'],
    'D': ['D11', 'D12']
}, index=[9, 10])

result = df1._append(df4, ignore_index=True, sort=False)
print(result)

Output:

Pandas 将一个 DataFrame 添加到另一个 DataFrame

9. 合并时包含额外信息

有时在合并 DataFrame 时,可能需要添加额外的信息来标识数据来源。可以在 append 操作前后添加额外的列。

import pandas as pd

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

df2 = pd.DataFrame({
    'A': ['A3', 'A4', 'A5'],
    'B': ['B3', 'B4', 'B5']
}, index=[3, 4, 5])

df3 = pd.DataFrame({
    'A': ['A8', 'A9', 'A10'],
    'B': ['B8', 'B9', 'B10'],
    'C': ['C8', 'C9', 'C10']
}, index=[6, 7, 8])

df4 = pd.DataFrame({
    'A': ['A11', 'A12'],
    'D': ['D11', 'D12']
}, index=[9, 10])

df2['source'] = 'pandasdataframe.com'
result = df1._append(df2)
print(result)

Output:

Pandas 将一个 DataFrame 添加到另一个 DataFrame

10. 使用多级索引

在更复杂的数据结构中,可能需要使用多级索引(MultiIndex)。append() 也支持多级索引的 DataFrame。

import pandas as pd

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

df2 = pd.DataFrame({
    'A': ['A3', 'A4', 'A5'],
    'B': ['B3', 'B4', 'B5']
}, index=[3, 4, 5])

df3 = pd.DataFrame({
    'A': ['A8', 'A9', 'A10'],
    'B': ['B8', 'B9', 'B10'],
    'C': ['C8', 'C9', 'C10']
}, index=[6, 7, 8])

df4 = pd.DataFrame({
    'A': ['A11', 'A12'],
    'D': ['D11', 'D12']
}, index=[9, 10])

df1.index = pd.MultiIndex.from_product([['Group1'], [0, 1, 2]], names=['Group', 'Num'])
df2.index = pd.MultiIndex.from_product([['Group2'], [3, 4, 5]], names=['Group', 'Num'])

result = df1._append(df2)
print(result)

Output:

Pandas 将一个 DataFrame 添加到另一个 DataFrame

结论

Pandas 的 append() 函数提供了一个非常灵活的方式来合并两个或多个 DataFrame。通过正确使用 ignore_indexsort 参数以及处理不同的数据结构,可以有效地解决数据合并中遇到的各种问题。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程