Pandas Append DataFrame
在数据分析和数据处理中,经常需要将多个数据集合并为一个大的数据集。Pandas 是 Python 中一个强大的数据处理库,它提供了多种方式来合并数据,其中 append()
函数是一个非常实用的工具,用于将一行或多行追加到 DataFrame 中。本文将详细介绍如何使用 Pandas 的 append()
方法,包括其语法、参数以及多个实用的示例代码。
1. append()
方法概述
Pandas 中的 append()
方法可以将一行或多个行附加到 DataFrame 的末尾。这个方法不会直接修改原始 DataFrame,而是返回一个新的 DataFrame,其中包含了原始数据和追加的数据。使用 append()
方法时,可以选择是否忽略索引。如果不忽略索引,追加的数据将保留其原始索引;如果选择忽略,Pandas 将重新为合并后的 DataFrame 创建一个新的整数索引。
2. append()
方法的语法
append()
方法的基本语法如下:
DataFrame.append(other, ignore_index=False, verify_integrity=False, sort=False)
- other: 要追加的数据,可以是 DataFrame、Series 或者是字典列表。
- ignore_index: 布尔值,默认为 False。如果为 True,则不使用索引标签。
- verify_integrity: 布尔值,默认为 False。如果为 True,则会检查新生成的 DataFrame 是否包含重复的索引。
- sort: 布尔值,默认为 False。如果为 True,则在合并轴上对数据进行排序。
3. 示例代码
示例 1:基本追加操作
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])
# 追加 df2 到 df1
result = df1._append(df2)
print(result)
Output:
示例 2:忽略索引追加
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])
# 追加 df2 到 df1,忽略索引
result = df1._append(df2, ignore_index=True)
print(result)
Output:
示例 3:追加多个 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': ['A6', 'A7', 'A8'],
'B': ['B6', 'B7', 'B8']
}, index=[6, 7, 8])
# 追加 df2 和 df3 到 df1
result = df1._append([df2, df3])
print(result)
Output:
示例 4:追加 Series 作为新行
import pandas as pd
# 创建 DataFrame
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
}, index=[0, 1, 2])
# 创建 Series
s1 = pd.Series(['A3', 'B3'], index=['A', 'B'])
# 追加 Series 到 DataFrame
result = df1._append(s1, ignore_index=True)
print(result)
Output:
示例 5:使用字典追加新行
import pandas as pd
# 创建 DataFrame
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
}, index=[0, 1, 2])
# 使用字典追加新行
result = df1._append({'A': 'A3', 'B': 'B3'}, ignore_index=True)
print(result)
Output:
示例 6:验证数据完整性
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=[2, 3, 4]) # 注意这里的索引2重复
# 尝试追加 df2 到 df1,开启验证
try:
result = df1._append(df2, verify_integrity=True)
print(result)
except ValueError as e:
print(e)
Output:
示例 7:排序追加的数据
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
'A': ['A1', 'A2', 'A0'],
'B': ['B1', 'B2', 'B0']
}, index=[0, 1, 2])
df2 = pd.DataFrame({
'A': ['A3', 'A5', 'A4'],
'B': ['B3', 'B5', 'B4']
}, index=[3, 4, 5])
# 追加 df2 到 df1,并排序
result = df1._append(df2, sort=True)
print(result)
Output:
示例 8:追加空 DataFrame
import pandas as pd
# 创建一个空的 DataFrame
df1 = pd.DataFrame()
# 创建另一个 DataFrame
df2 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
}, index=[0, 1, 2])
# 追加 df2 到空的 df1
result = df1._append(df2)
print(result)
Output:
示例 9:追加具有不同列的 DataFrame
import pandas as pd
# 创建两个 DataFrame,列不同
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
}, index=[0, 1, 2])
df2 = pd.DataFrame({
'C': ['C3', 'C4', 'C5'],
'D': ['D3', 'D4', 'D5']
}, index=[3, 4, 5])
# 追加 df2 到 df1
result = df1._append(df2)
print(result)
Output:
示例 10:追加时包含额外的列
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'],
'C': ['C3', 'C4', 'C5']
}, index=[3, 4, 5])
# 追加 df2 到 df1
result = df1._append(df2)
print(result)
Output:
示例 11:追加 DataFrame 时处理 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'],
'C': ['C3', 'C4', 'C5']
}, index=[3, 4, 5])
# 追加 df2 到 df1,处理 NaN 值
result = df1._append(df2)
print(result)
Output:
示例 12:使用多级索引追加 DataFrame
import pandas as pd
# 创建具有多级索引的 DataFrame
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
}, index=pd.MultiIndex.from_tuples([('x', 0), ('x', 1), ('x', 2)], names=['X', 'Y']))
df2 = pd.DataFrame({
'A': ['A3', 'A4', 'A5'],
'B': ['B3', 'B4', 'B5']
}, index=pd.MultiIndex.from_tuples([('y', 3), ('y', 4), ('y', 5)], names=['X', 'Y']))
# 追加 df2 到 df1
result = df1._append(df2)
print(result)
Output:
示例 13:追加 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])
# 追加 df2 到 df1 并重置索引
result = df1._append(df2, ignore_index=True)
print(result)
Output:
示例 14:追加 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])
# 追加 df2 到 df1,保留原有索引
result = df1._append(df2)
print(result)
Output:
示例 15:追加 DataFrame 并使用自定义排序
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
'A': ['A1', 'A2', 'A0'],
'B': ['B1', 'B2', 'B0']
}, index=[0, 1, 2])
df2 = pd.DataFrame({
'A': ['A3', 'A5', 'A4'],
'B': ['B3', 'B5', 'B4']
}, index=[3, 4, 5])
# 追加 df2 到 df1,并使用自定义排序
result = df1._append(df2).sort_values(by=['A'])
print(result)
Output:
示例 16:追加 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'],
'C': ['C3', 'C4', 'C5']
}, index=[3, 4, 5])
# 追加 df2 到 df1,并合并列
result = df1._append(df2)
print(result)
Output:
示例 17:追加 DataFrame 并处理数据类型不一致
import pandas as pd
# 创建两个 DataFrame,数据类型不一致
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': [0, 1, 2]
}, index=[0, 1, 2])
df2 = pd.DataFrame({
'A': ['A3', 'A4', 'A5'],
'B': ['3', '4', '5']
}, index=[3, 4, 5])
# 追加 df2 到 df1,并处理数据类型不一致
result = df1._append(df2)
print(result)
Output:
示例 18:追加 DataFrame 并填充缺失值
import pandas as pd
# 创建两个 DataFrame,第二个 DataFrame 缺少一些列
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2'],
'C': [1, 2, 3]
}, index=[0, 1, 2])
df2 = pd.DataFrame({
'A': ['A3', 'A4', 'A5'],
'B': ['B3', 'B4', 'B5']
}, index=[3, 4, 5])
# 追加 df2 到 df1,并填充缺失值
result = df1._append(df2).fillna(0)
print(result)
Output:
示例 19:追加 DataFrame 并调整列顺序
import pandas as pd
# 创建两个 DataFrame,列顺序不同
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
}, index=[0, 1, 2])
df2 = pd.DataFrame({
'B': ['B3', 'B4', 'B5'],
'A': ['A3', 'A4', 'A5']
}, index=[3, 4, 5])
# 追加 df2 到 df1,并调整列顺序
result = df1._append(df2)[['A', 'B']]
print(result)
Output:
示例 20:追加 DataFrame 并合并多个 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': ['A6', 'A7', 'A8'],
'B': ['B6', 'B7', 'B8']
}, index=[6, 7, 8])
# 追加 df2 和 df3 到 df1
result = df1._append([df2, df3])
# 输出结果
print(result)
Output:
示例 21:使用 concat 进行 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])
# 使用 concat 进行追加
result = pd.concat([df1, df2])
# 输出结果
print(result)
Output:
示例 22:使用 concat 进行 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])
# 使用 concat 进行追加,保留原始索引
result = pd.concat([df1, df2], ignore_index=False)
# 输出结果
print(result)
Output:
示例 23:使用 concat 进行 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])
# 使用 concat 进行追加,忽略原始索引
result = pd.concat([df1, df2], ignore_index=True)
# 输出结果
print(result)
Output:
示例 24:使用 concat 合并多个 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': ['A6', 'A7', 'A8'],
'B': ['B6', 'B7', 'B8']
}, index=[6, 7, 8])
# 使用 concat 合并多个 DataFrame,并添加多级索引
result = pd.concat([df1, df2, df3], keys=['Group1', 'Group2', 'Group3'])
# 输出结果
print(result)
Output:
这些示例展示了如何使用 append
和 concat
方法来追加和合并多个 DataFrame。这些方法可以灵活地处理索引、排序和数据类型不一致的情况,使得数据合并变得更加容易和高效。