首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >加速版 Pandas 库,一个字,快!

加速版 Pandas 库,一个字,快!

作者头像
Ai学习的老章
发布2025-06-08 19:07:22
发布2025-06-08 19:07:22
14900
代码可运行
举报
运行总次数:0
代码可运行

Ai学习的老章

长期跟踪关注统计学、机器学习算法、深度学习、人工智能、大模型技术与行业发展动态,日更精选技术文章。回复机器学习有惊喜资料。

672篇原创内容

公众号

什么是 FireDucks?

FireDucks 是一个完全兼容 Pandas 的加速库,它不是要替代 Pandas,而是作为 Pandas 的加速器工作。它允许用户继续使用熟悉的 Pandas API,同时显著提高执行速度。

图片
图片

FireDucks 的核心特点

1. 完全兼容 Pandas

  • 使用与 Pandas 相同的 API
  • 无需修改现有代码
  • 可以轻松替换现有的 Pandas 代码

2. 高性能

  • 比原生 Pandas 快数倍到数十倍
  • 特别适合处理大型数据集和复杂操作

3. 两种使用方式

  • 导入钩子(Import Hook):不需要修改代码,自动替换 Pandas 导入
    • %load_ext fireducks.pandas import pandas as pd
  • 显式导入(Explicit Import):手动替换导入语句 import fireducks.pandas as pd

工作原理

FireDucks 通过两种主要方法加速 Pandas 操作:

  1. 编译器优化
    • 将 Python 程序转换为中间语言
    • 专为 DataFrame 操作设计的优化
  2. 多线程处理
    • 利用多核 CPU 并行处理数据
    • 类似 GPU 加速的原理
  3. 惰性执行模型
    • 不立即执行操作,而是生成中间语言
    • 只在需要结果时(如保存文件、显示数据)才执行所有操作
    • 批处理优化提高整体性能

安装方法

FireDucks 目前支持 Linux (manylinux) 在 x86_64 架构上,可以通过 pip 轻松安装:

代码语言:javascript
代码运行次数:0
运行
复制
pip install fireducks

要求 Python >3.8, <=3.13(注意:自 FireDucks 1.1.0 起,由于升级了依赖的 pyarrow 到 18.0.0,不再支持 Python 3.8)

使用方法

方法一:导入钩子(推荐)

在 Python 脚本中使用:

代码语言:javascript
代码运行次数:0
运行
复制
python3 -m fireducks.pandas your_script.py

在 IPython/Jupyter Notebook 中使用:

代码语言:javascript
代码运行次数:0
运行
复制
%load_ext fireducks.pandas
import pandas as pd
# 后续代码与使用 Pandas 完全相同

方法二:显式导入

代码语言:javascript
代码运行次数:0
运行
复制
# 替换 import pandas as pd
import fireducks.pandas as pd

性能对比

以下是一个简单的性能对比示例:

代码语言:javascript
代码运行次数:0
运行
复制
import time
import numpy as np
import pandas as pd        
import fireducks.pandas as fpd  

n = _000_000
np.random.seed()
data = {
    "x": np.random.randint(, , n),
    "y": np.random.rand(n)
}

df_pandas = pd.DataFrame(data)
df_fireducks = fpd.DataFrame(data)

start_pd = time.time()
sorted_pd = df_pandas.sort_values("x")
time_pd = time.time() - start_pd

start_fd = time.time()
sorted_fd = df_fireducks.sort_values("x")
time_fd = time.time() - start_fd

print("Pandas 排序时间:{:.4f} 秒".format(time_pd))
print("FireDucks 排序时间:{:.4f} 秒".format(time_fd))

结果:

代码语言:javascript
代码运行次数:0
运行
复制
Pandas 排序时间: 0.0009 秒
FireDucks 排序时间: 0.0004 秒

在更大的数据集和更复杂的操作中,性能差异会更加明显。

性能测量注意事项

由于 FireDucks 使用惰性执行模型,测量单个方法的性能需要特别注意。有三种方法可以准确测量性能:

  1. 启用基准测试模式# 通过环境变量 FIREDUCKS_FLAGS="--benchmark-mode" # 或在代码中 from fireducks.core import get_fireducks_options get_fireducks_options().set_benchmark_mode(True)
  2. 使用 _evaluate() 方法t0 = time.time() df = pd.read_csv("data.csv")._evaluate() t1 = time.time() df = df.sort_values("a")._evaluate() t2 = time.time()

基准测试结果

1. 数据库类操作基准测试

FireDucks 团队评估了 db-benchmark[1] 的性能,该基准测试包括在多种大小的数据集上执行基本数据科学操作的场景。

截至 2024 年 9 月 10 日,FireDucks 在大数据的分组(groupby)和连接(join)操作方面似乎是最快的数据框架库。

图片
图片

测试环境:

  • FireDucks 版本:fireducks-1.0.4
  • CPU 型号:Intel(R) Xeon(R) Platinum 8375C CPU @ 2.90GHz
  • CPU 核心数:128
  • 内存:256GB

2. TPC-H 基准测试

TPC-H 是一个决策支持基准测试,包含复杂的查询和大量数据修改。

图片
图片

上图比较了四个数据框架库(Pandas、DuckDB、Polars 和 FireDucks)在 22 个不同查询上的性能。垂直轴以对数刻度显示与 Pandas 相比快多少倍,大于 1 表示比 Pandas 快。

测试环境:

  • 服务器规格(AWS EC2 m7i.8xlarge)
  • CPU:INTEL(R) XEON(R) GOLD 6526Y(32 核)
  • 内存:512GB
  • 操作系统:Ubuntu 24.04

3. TPCx-BB 基准测试

TPCx-BB 包括与使用机器学习及其预处理的数据分析相关的查询。

图片
图片

在 TPCx-BB 测试中,FireDucks 比 Pandas 最高快 17 倍,平均快 6.7 倍。

测试环境:

  • CPU:Intel(R) Xeon(R) Gold 5317 CPU @ 3.00GHz x 2 插槽(共 48 个硬件线程)
  • 内存:256GB
  • 测试版本:
    • pandas-2.1.4
    • fireducks-0.9.3

使用注意事项

由于惰性执行模型,使用传统的 try-catch 块检查 KeyError 可能不会按预期工作:

代码语言:javascript
代码运行次数:0
运行
复制
# 不推荐的方式
def project(df, cname):
    try:
        s = df[cname]  # 由于惰性执行,这里不会立即执行
    except KeyError:
        print(f"列 {cname} 在输入数据框中不存在")
    else:
        return s

推荐的方式:

代码语言:javascript
代码运行次数:0
运行
复制
# 推荐方式 1:使用 _evaluate() 强制执行
def project(df, cname):
    try:
        s = df[cname]._evaluate()
    except KeyError:
        print(f"列 {cname} 在输入数据框中不存在")
    else:
        return s

# 推荐方式 2:使用 in 操作符
def project(df, cname):
    if cname notin df:  # 这会立即执行
        print(f"列 {cname} 在输入数据框中不存在")
    else:
        s = df[cname]
        return s

在线体验 FireDucks

您可以通过 Google Colab 免费体验 FireDucks 的易用性和高性能:

  • pandas_nyc_demo.ipynb[2]
  • fireducks_pandas_nyc_demo.ipynb[3]
  • FireDucks_vs_Pandas_vs_Polars.ipynb[4]

总结

FireDucks 是一个强大的 Pandas 加速库,通过编译器优化和多线程处理,显著提高了数据处理速度,同时保持了与 Pandas 的完全兼容性。它特别适合处理大型数据集和复杂的数据操作,可以轻松集成到现有的 Pandas 代码中,无需大量修改。

根据多项基准测试,FireDucks 在各种数据处理场景中都展现出了显著的性能优势,尤其是在处理大型数据集和复杂查询时。

资源链接

  • 官方网站:https://fireducks-dev.github.io[5]
  • GitHub 仓库:https://github.com/fireducks-dev/fireducks[6]
  • Slack 社区:加入 FireDucks Slack[8]

Ai学习的老章

长期跟踪关注统计学、机器学习算法、深度学习、人工智能、大模型技术与行业发展动态,日更精选技术文章。回复机器学习有惊喜资料。

672篇原创内容

公众号

参考资料

[1] 

db-benchmark: https://github.com/duckdblabs/db-benchmark

[2] 

pandas_nyc_demo.ipynb: https://colab.research.google.com/github/fireducks-dev/fireducks/blob/main/notebooks/nyc_demo/pandas_nyc_demo.ipynb

[3] 

fireducks_pandas_nyc_demo.ipynb: https://colab.research.google.com/github/fireducks-dev/fireducks/blob/main/notebooks/nyc_demo/fireducks_pandas_nyc_demo.ipynb

[4] 

FireDucks_vs_Pandas_vs_Polars.ipynb: https://colab.research.google.com/github/fireducks-dev/fireducks/blob/main/notebooks/FireDucks_vs_Pandas_vs_Polars.ipynb

[5] 

https://fireducks-dev.github.io: https://fireducks-dev.github.io

[6] 

https://github.com/fireducks-dev/fireducks: https://github.com/fireducks-dev/fireducks

[7] 

contact@fireducks.jp.nec.com: mailto:contact@fireducks.jp.nec.com

[8] 

加入 FireDucks Slack: https://join.slack.com/t/fireducks/shared_invite/zt-2j4lucmtj-IGR7AWlXO62Lu605pnBJ2w

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-07,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 机器学习与统计学 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是 FireDucks?
  • FireDucks 的核心特点
    • 1. 完全兼容 Pandas
    • 2. 高性能
    • 3. 两种使用方式
  • 工作原理
  • 安装方法
  • 使用方法
    • 方法一:导入钩子(推荐)
    • 方法二:显式导入
  • 性能对比
  • 性能测量注意事项
  • 基准测试结果
    • 1. 数据库类操作基准测试
    • 2. TPC-H 基准测试
    • 3. TPCx-BB 基准测试
  • 使用注意事项
  • 在线体验 FireDucks
  • 总结
  • 资源链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档