pandas append deprecated
在数据分析和数据处理中,pandas 是 Python 中最受欢迎的库之一。它提供了大量的功能来处理和分析数据,其中 DataFrame.append()
方法长期以来一直是合并数据的常用方法。然而,从 pandas 1.4.0 版本开始,append()
方法已被官方标记为弃用(deprecated),推荐使用更为强大和灵活的 concat()
函数或直接使用 DataFrame
的 concat
方法来替代。本文将详细介绍 append()
方法的弃用原因、替代方案以及如何迁移到新的方法。
弃用原因
DataFrame.append()
方法在功能上与 concat()
函数重叠,但 concat()
提供了更多的灵活性和控制,特别是在处理大型数据集时。append()
方法在内部实际上是调用了 concat()
,但其默认行为和参数设置较为简单,这限制了其在复杂数据合并场景下的应用。因此,为了简化 API 并鼓励用户使用更强大的 concat()
方法,pandas 开发团队决定逐步弃用 append()
。
使用 concat() 替代 append()
concat()
函数不仅能够替代 append()
完成相同的任务,还能提供更多的参数设置,如处理索引、处理多个对象合并等。下面通过一系列示例来展示如何使用 concat()
替代 append()
。
示例 1:基本的 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])
# 使用 concat 替代 append
result = pd.concat([df1, df2])
print(result)
Output:
示例 2:保留索引
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 替代 append,保留原始索引
result = pd.concat([df1, df2], ignore_index=False)
print(result)
Output:
示例 3:不保留索引
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 替代 append,不保留原始索引
result = pd.concat([df1, df2], ignore_index=True)
print(result)
Output:
示例 4:沿不同轴合并
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({
'E': ['E0', 'E1', 'E2', 'E3'],
'F': ['F0', 'F1', 'F2', 'F3'],
'G': ['G0', 'G1', 'G2', 'G3'],
'H': ['H0', 'H1', 'H2', 'H3']
}, index=[0, 1, 2, 3])
# 使用 concat 替代 append,沿列方向合并
result = pd.concat([df1, df2], axis=1)
print(result)
Output:
示例 5:合并多个 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])
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])
# 使用 concat 替代 append,合并多个 DataFrame
result = pd.concat([df1, df2, df3])
print(result)
Output:
示例 6:添加单行
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']
})
# 创建一个 Series,作为新行
new_row = pd.Series(['A4', 'B4', 'C4', 'D4'], index=['A', 'B', 'C', 'D'])
# 使用 concat 替代 append 添加单行
result = pd.concat([df1, pd.DataFrame([new_row])], ignore_index=True)
print(result)
Output:
示例 7:合并具有不同列的 DataFrame
import pandas as pd
# 创建两个 DataFrame,列不完全相同
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3']
})
df2 = pd.DataFrame({
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7'],
'D': ['D4', 'D5', 'D6', 'D7']
})
# 使用 concat 替代 append,合并具有不同列的 DataFrame
result = pd.concat([df1, df2], sort=False)
print(result)
Output:
示例 8:处理合并时的重复索引
import pandas as pd
# 创建两个 DataFrame,具有重复的索引
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3']
}, index=[0, 1, 2, 3])
df2 = pd.DataFrame({
'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7']
}, index=[2, 3, 4, 5])
# 使用 concat 替代 append,处理合并时的重复索引
result = pd.concat([df1, df2], ignore_index=True)
print(result)
Output:
示例 9:使用 keys 参数创建多级索引
import pandas as pd
# 创建两个 DataFrame
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3'],
'C': ['C0', 'C1', 'C2', 'C3']
})
df2 = pd.DataFrame({
'A': ['A4', 'A5', 'A6', 'A7'],
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7']
})
# 使用 concat 替代 append,使用 keys 参数创建多级索引
result = pd.concat([df1, df2], keys=['df1', 'df2'])
print(result)
Output:
示例 10:合并时使用不同的 join 类型
import pandas as pd
# 创建两个 DataFrame,列不完全相同
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']
})
df2 = pd.DataFrame({
'B': ['B4', 'B5', 'B6', 'B7'],
'C': ['C4', 'C5', 'C6', 'C7']
})
# 使用 concat 替代 append,使用不同的 join 类型
result = pd.concat([df1, df2], join='inner')
print(result)
Output:
以上示例展示了如何使用 concat()
函数来替代 append()
方法进行数据的合并和处理。通过这些示例,可以看到 concat()
提供了更多的灵活性和功能,使得数据合并更加高效和可控。随着 append()
方法的逐步弃用,建议用户逐渐过渡到使用 concat()
来处理数据合并的需求。