pandas append vs concat
在数据分析和数据处理中,经常需要将多个数据集合并为一个大的数据集。Pandas库提供了多种方法来实现这一点,其中最常用的是append()
和concat()
函数。本文将详细介绍这两个函数的用法、区别以及何时使用哪一个更合适。
1. pandas append()
函数
append()
函数是一种快速合并两个DataFrame的方法。它主要用于将一行或多行追加到DataFrame的末尾。这个函数返回一个新的DataFrame,而不会改变原有的DataFrame。
示例代码 1:使用 append()
添加单行
import pandas as pd
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
})
new_row = pd.Series(['A3', 'B3'], index=df1.columns, name='pandasdataframe.com')
df2 = df1._append(new_row)
print(df2)
Output:
示例代码 2:使用 append()
添加多行
import pandas as pd
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
})
new_rows = pd.DataFrame({
'A': ['A3', 'A4'],
'B': ['B3', 'B4']
}, index=['pandasdataframe.com', 'pandasdataframe.com'])
df2 = df1._append(new_rows)
print(df2)
Output:
2. pandas concat()
函数
concat()
函数更加通用,它可以合并两个或多个Pandas对象。不仅限于行的追加,还可以进行列的合并,支持多种连接方式(如内连接、外连接)。
示例代码 3:简单的纵向合并
import pandas as pd
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
})
df2 = pd.DataFrame({
'A': ['A3', 'A4', 'A5'],
'B': ['B3', 'B4', 'B5']
})
result = pd.concat([df1, df2], ignore_index=True)
print(result)
Output:
示例代码 4:横向合并
import pandas as pd
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
})
df2 = pd.DataFrame({
'C': ['C0', 'C1', 'C2'],
'D': ['D0', 'D1', 'D2']
})
result = pd.concat([df1, df2], axis=1)
print(result)
Output:
3. append()
vs concat()
虽然append()
和concat()
都可以用来合并数据,但它们在使用上有一些重要的区别。
示例代码 5:使用 append()
进行多DataFrame合并
import pandas as pd
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
})
df2 = pd.DataFrame({
'A': ['A3', 'A4', 'A5'],
'B': ['B3', 'B4', 'B5']
})
df3 = pd.DataFrame({
'A': ['A6', 'A7', 'A8'],
'B': ['B6', 'B7', 'B8']
})
result = df1._append([df2, df3], ignore_index=True)
print(result)
Output:
示例代码 6:使用 concat()
进行多DataFrame合并
import pandas as pd
df1 = pd.DataFrame({
'A': ['A0', 'A1', 'A2'],
'B': ['B0', 'B1', 'B2']
})
df2 = pd.DataFrame({
'A': ['A3', 'A4', 'A5'],
'B': ['B3', 'B4', 'B5']
})
df3 = pd.DataFrame({
'A': ['A6', 'A7', 'A8'],
'B': ['B6', 'B7', 'B8']
})
result = pd.concat([df1, df2, df3], ignore_index=True)
print(result)
Output:
4. 性能考虑
在处理大型数据集时,性能是一个重要的考虑因素。concat()
函数通常比append()
函数更高效,特别是在合并大量的DataFrame时。
示例代码 7:比较 append()
和 concat()
的性能
import pandas as pd
import time
# 创建大型数据
data = pd.DataFrame({
'A': range(10000),
'B': range(10000)
})
start_time = time.time()
result = pd.DataFrame()
for _ in range(100):
result = result.append(data, ignore_index=True)
print("Append time:", time.time() - start_time)
start_time = time.time()
result = pd.concat([data]*100, ignore_index=True)
print("Concat time:", time.time() - start_time)
5. 结论
在选择append()
和concat()
时,如果你只是需要追加几行数据,append()
可能是一个简单直接的选择。但如果你需要合并大量的数据或者进行复杂的合并操作,concat()
将是更好的选择,因为它提供了更多的功能和更好的性能。