pandas append 使用详解
在数据分析和数据处理中,经常需要将多个数据集合并为一个大的数据集。Pandas 提供了多种方式来合并数据,其中 append
方法是一个非常直观和常用的方法来合并两个DataFrame。本文将详细介绍 append
方法的使用,包括其基本用法、参数详解以及与其他合并方法的比较。
1. 基本用法
append
方法可以将一个DataFrame添加到另一个DataFrame的末尾。这个方法默认不会直接修改原有的DataFrame,而是返回一个新的DataFrame。
示例代码 1:基本的append操作
import pandas as pd
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 = df1._append(df2)
print(result)
Output:
2. 忽略索引
在使用 append
方法时,可以选择是否保留原DataFrame的索引。如果不希望保留原索引,可以设置 ignore_index=True
。
示例代码 2:使用ignore_index参数
import pandas as pd
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 = df1._append(df2, ignore_index=True)
print(result)
Output:
3. 添加单行数据
append
方法也可以用来添加单行数据。可以通过传递一个字典或者Series对象来实现。
示例代码 3:添加单行数据
import pandas as pd
df = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2'],
'C': ['C0', 'C1', 'C2']
}, index=[0, 1, 2])
new_row = {'A': 'A3', 'B': 'B3', 'C': 'C3'}
result = df._append(new_row, ignore_index=True)
print(result)
Output:
4. 使用多个append操作
可以连续使用多个 append
操作来合并多个DataFrame。每次 append
都会返回一个新的DataFrame,因此可以连续调用。
示例代码 4:连续使用append
import pandas as pd
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2'],
'C': ['C0', 'C1', 'C2']
}, index=[0, 1, 2])
df2 = pd.DataFrame({
'A': ['A3', 'A4', 'A5'],
'B': ['B3', 'B4', 'B5'],
'C': ['C3', 'C4', 'C5']
}, index=[3, 4, 5])
df3 = pd.DataFrame({
'A': ['A6', 'A7', 'A8'],
'B': ['B6', 'B7', 'B8'],
'C': ['C6', 'C7', 'C8']
}, index=[6, 7, 8])
result = df1._append(df2)._append(df3)
print(result)
5. 合并具有不同列的DataFrame
当合并的DataFrame具有不同的列时,append
方法会自动对齐列,并在缺失的位置填充NaN。
示例代码 5:合并具有不同列的DataFrame
import pandas as pd
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
}, index=[0, 1, 2])
df2 = pd.DataFrame({
'B': ['B3', 'B4'],
'C': ['C3', 'C4']
}, index=[3, 4])
result = df1._append(df2)
print(result)
Output:
6. 使用sort参数
从Pandas 0.23版本开始,append
方法添加了 sort
参数。当合并的DataFrame列不完全相同时,可以通过设置 sort=True
或 sort=False
来控制合并后的列的排序。
示例代码 6:使用sort参数
import pandas as pd
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2'],
'D': ['D0', 'D1', 'D2']
}, index=[0, 1, 2])
df2 = pd.DataFrame({
'A': ['A3', 'A4', 'A5'],
'B': ['B3', 'B4', 'B5'],
'C': ['C3', 'C4', 'C5']
}, index=[3, 4, 5])
result = df1._append(df2, sort=False)
print(result)
Output:
7. 性能考虑
虽然 append
方法非常方便,但在处理大规模数据或者在循环中多次使用 append
时,可能会导致性能问题。这是因为每次使用 append
都会创建一个新的DataFrame,这会消耗额外的内存和CPU时间。在这种情况下,建议使用更高效的方法,如 pandas.concat
或直接使用DataFrame的列表构造函数。
示例代码 7:使用pandas.concat代替append
import pandas as pd
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2'],
'C': ['C0', 'C1', 'C2']
}, index=[0, 1, 2])
df2 = pd.DataFrame({
'A': ['A3', 'A4', 'A5'],
'B': ['B3', 'B4', 'B5'],
'C': ['C3', 'C4', 'C5']
}, index=[3, 4, 5])
result = pd.concat([df1, df2])
print(result)
Output:
使用 pandas.concat
可以有效地处理大量数据的合并,特别是在需要合并多个DataFrame时,它比 append
方法更加高效。
8. append与concat的选择
虽然 append
和 concat
都可以用来合并数据,但它们在使用上有所不同。append
是一个便捷的方法,适用于快速添加少量数据。而 concat
提供了更多的灵活性,可以合并多个DataFrame,并且可以在不同的轴向上进行合并。
示例代码 8:比较append和concat
import pandas as pd
# 使用append
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2'],
'C': ['C0', 'C1', 'C2']
}, index=[0, 1, 2])
df2 = pd.DataFrame({
'A': ['A3', 'A4', 'A5'],
'B': ['B3', 'B4', 'B5'],
'C': ['C3', 'C4', 'C5']
}, index=[3, 4, 5])
result_append = df1._append(df2)
# 使用concat
result_concat = pd.concat([df1, df2])
print("Append result:")
print(result_append)
print("\nConcat result:")
print(result_concat)
Output:
9. 处理具有不同索引的DataFrame
当合并具有不同索引的DataFrame时,append
和 concat
都可以处理索引的对齐问题,但需要注意索引的重复问题。
示例代码 9:处理具有不同索引的DataFrame
import pandas as pd
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
}, index=[0, 1, 2])
df2 = pd.DataFrame({
'A': ['A3', 'A4'],
'B': ['B3', 'B4']
}, index=[2, 3])
result = df1._append(df2)
print(result)
Output:
在这个例子中,df1
和 df2
具有重叠的索引。使用 append
方法时,默认会保留所有索引,即使它们重复。
10. 结论
在Pandas中,append
方法提供了一种快速而简便的方式来合并两个DataFrame。然而,当处理大量数据或需要更高效的数据合并操作时,建议使用 pandas.concat
方法,因为它提供了更高的灵活性和效率。在实际应用中,选择合适的方法取决于具体的数据结构和需求。