前言
在 Python 中,pandas 和 openpyxl 都可以用于处理 Excel 文件,但它们的性能表现和适用场景有所不同。以下是两者的对比,特别是在存储数据(写入 Excel 文件)时的性能差异。
1、性能比较
pandas 更快:
-
pandas 是基于 openpyxl 或 xlsxwriter 等库的高级封装,专门为数据处理和批量操作优化。
-
在写入数据时,pandas 会批量处理数据并调用底层库(如 openpyxl 或 xlsxwriter),因此通常比直接使用 openpyxl 更快。
-
对于大数据量的写入,pandas 的性能优势更加明显。
openpyxl 较慢:
-
openpyxl 是一个更底层的库,适合对 Excel 文件进行精细操作(如设置单元格样式、公式等)。
-
如果直接使用 openpyxl 逐行或逐单元格写入数据,性能会较差,尤其是在数据量较大时。
2、测试示例
以下是一个简单的性能测试,比较 pandas 和 openpyxl 写入数据的速度:
使用 pandas 写入数据
import pandas as pd
import numpy as np
import time
# 生成一个大数据集
data = np.random.rand(10000, 100) # 10000 行 x 100 列
# 转换为 DataFrame
df = pd.DataFrame(data)
# 计时
start_time = time.time()
df.to_excel('pandas_output.xlsx', index=False, engine='openpyxl')
end_time = time.time()
print(f"pandas 写入时间: {end_time - start_time:.2f} 秒")
使用 openpyxl 写入数据
from openpyxl import Workbook
import numpy as np
import time
# 生成一个大数据集
data = np.random.rand(10000, 100) # 10000 行 x 100 列
# 创建 Workbook
wb = Workbook()
ws = wb.active
# 计时
start_time = time.time()
for row in data:
ws.append(row.tolist())
wb.save('openpyxl_output.xlsx')
end_time = time.time()
print(f"openpyxl 写入时间: {end_time - start_time:.2f} 秒")
3、测试结果
1、对于 10,000 行 x 100 列的数据:
-
pandas 写入时间:约 5-10 秒。
-
openpyxl 写入时间:约 20-30 秒。
2、对于更大的数据集(如 100,000 行 x 100 列):
-
pandas 仍然可以较快完成(几十秒到几分钟)。
-
openpyxl 可能非常慢(几分钟到几十分钟)。
4、为什么 pandas 更快?
1、批量操作:
- pandas 会将数据批量传递给底层库(如 openpyxl 或 xlsxwriter),减少了频繁的 I/O 操作。
2、优化实现:
- pandas 内部使用了高效的算法和数据结构(如 NumPy 数组),适合处理大规模数据。
3、底层库选择:
- pandas 默认使用 xlsxwriter 作为写入引擎,而 xlsxwriter 在某些情况下比 openpyxl 更快。
5、使用场景
1、使用 pandas:
-
适合处理大规模数据,尤其是数据分析和批量操作。
-
如果需要快速读写 Excel 文件,优先选择 pandas。
2、使用 openpyxl:
-
适合需要对 Excel 文件进行精细操作(如设置样式、公式、图表等)。
-
如果数据量较小,且需要更多控制权,可以使用 openpyxl。
6、进一步优化
如果你需要更快的写入速度,可以尝试以下方法:
1、使用 xlsxwriter 引擎:
- pandas 默认使用 openpyxl 作为写入引擎,但可以切换到 xlsxwriter,后者在某些情况下更快。
df.to_excel('output.xlsx', index=False, engine='xlsxwriter') # engine='xlsxwriter',设置引擎
2、分块写入:
- 对于非常大的数据集,可以将数据分块写入多个工作表或文件。
3、使用其他格式:
- 如果不需要 Excel 格式,可以考虑使用更高效的文件格式,如 .csv、.parquet 或 .feather。
总结
-
pandas 在存储数据时通常比 openpyxl 更快,尤其是在处理大规模数据时。
-
如果需要更高的性能,优先选择 pandas,并结合 xlsxwriter 引擎使用。
-
如果需要对 Excel 文件进行精细操作,再考虑使用 openpyxl。