2025-10-07 17:07:24 +08:00
2025-10-07 17:07:24 +08:00
2025-10-07 17:07:24 +08:00
2025-10-07 17:07:24 +08:00
2025-10-07 17:07:24 +08:00
2025-10-07 17:07:24 +08:00
2025-10-07 17:07:24 +08:00
2025-10-07 17:07:24 +08:00
2025-10-07 17:07:24 +08:00

Pandas Format Benchmark

Pandas格式性能基准测试工具用于比较不同数据存储格式在Pandas中的读写性能和文件大小。

项目简介

本项目旨在帮助开发者选择最适合其应用场景的数据存储格式。通过生成大量测试数据并对多种常见格式CSV、Parquet、Feather、HDF5、ORC、Pickle进行多次读写测试计算平均性能指标和文件大小从而为数据格式的选择提供客观依据。

功能特性

  • 支持多种数据格式的性能测试:
    • CSV (.csv)
    • Parquet (.parquet)
    • Feather (.feather)
    • HDF5 (.h5)
    • ORC (.orc)
    • Pickle (.pkl)
  • 可自定义测试数据量(行数)
  • 可自定义测试轮数
  • 可选择测试特定格式子集
  • 自动生成性能对比报告
  • 显示最快的写入/读取格式和最小的文件格式

安装要求

  • Python >= 3.13
  • 依赖包:
    • numpy >= 2.3.3
    • pandas >= 2.3.3
    • pyarrow >= 21.0.0
    • tables >= 3.10.2
    • tqdm >= 4.67.1

安装方法

推荐使用uv进行安装

# 进入项目
cd PandasFormatBenchmark

# 使用uv安装依赖
pip install uv
uv sync

使用方法

基本使用

运行默认测试100万行数据所有格式3轮测试

python -m main

或使用脚本命令:

benchmark

自定义参数

# 指定测试数据行数
benchmark --rows 500000

# 指定测试特定格式
benchmark --formats csv parquet feather

# 指定测试轮数
benchmark --rounds 5

# 组合使用多个参数
benchmark --rows 2000000 --formats parquet feather orc --rounds 10

参数说明

  • --rows: 测试数据行数默认为1,000,000
  • --formats: 要测试的格式列表,默认包含所有支持的格式
  • --rounds: 每种格式的测试轮数默认为3轮

测试数据结构

测试数据包含以下列:

  • id: 整数IDint32
  • name: 随机字符串10个字符
  • value: 随机浮点数
  • timestamp: 时间戳
  • category: 分类数据A/B/C/D
  • flag: 布尔值

输出示例

正在生成 1000000 行随机数据...
测试格式: 100%|█████████████████████████████████████████████████████████████████| 6/6 [00:52<00:00,  8.67s/it]

===== 性能测试结果 =====
 format  write_sec  read_sec  size_mb
    CSV      6.676     1.906    65.82
PARQUET      0.450     0.513    30.36
FEATHER      0.251     0.454    31.32
   HDF5      1.055     0.746    38.67
    ORC      0.672     0.538    20.21
 PICKLE      0.406     0.185    33.38

结论:
- 最快写入: FEATHER (0.251s)
- 最快读取: PICKLE (0.185s)
- 文件最小: ORC (20.21 MB)

注意事项

  1. 测试过程中会在项目目录下创建output文件夹用于存放临时测试文件
  2. 大量数据测试可能需要较长时间,请耐心等待
  3. HDF5格式使用table格式以支持category类型
  4. ORC格式会自动将category类型转换为字符串以避免兼容性问题

许可证

MIT License

Description
PandasFormatBenchmark
Readme 60 KiB
Languages
Python 100%