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:
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:
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:
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:
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:
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:
8. 使用 ignore_index
和 sort
组合
可以组合使用 ignore_index
和 sort
参数来同时控制索引和列的排序。
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:
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:
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 的 append()
函数提供了一个非常灵活的方式来合并两个或多个 DataFrame。通过正确使用 ignore_index
、sort
参数以及处理不同的数据结构,可以有效地解决数据合并中遇到的各种问题。