让 AI 处理 1GB 以内数据快 100 倍(替代 Pandas)

解决 Python 数据计算缓慢问题:引入 Polars 库替代 Pandas,利用 Apache Arrow 后端和惰性求值特性,为 1-100GB 内存内数据提供并行加速和极速 ETL 方案。

为什么需要这个技能

在处理中等规模数据时,Pandas 常因单线程执行和即时求值导致计算超时。Polars 专为 1-100GB 内存内数据集设计,利用 Apache Arrow 作为通用数据格式,结合惰性求值和并行计算引擎,实现比 Pandas 快 100 倍的效率。

适用场景包括迁移遗留的数据清洗脚本、构建实时分析管道,以及在处理多列复杂计算时避免内存瓶颈。

适用场景

  • Pandas 太慢时:当 Pandas 脚本在几 GB 数据上运行超过几分钟,而数据仍完全装入 RAM。
  • 构建 ETL 流程:清洗、转换和加载大数据集,需要利用列式存储和并行执行加速。
  • 复杂查询优化:需要多步骤过滤、聚合或连接操作,希望 AI 自动规划最优执行顺序。
  • 跨平台兼容:处理来自数据库、CSV 或云端存储的数据,利用统一的表表达式语义。

核心工作流

  1. 安装与初始化:使用 uv pippip 安装 Polars,导入 pl 模块。
  2. 惰性模式(LazyFrame):对于大数据集,使用 pl.scan_csv()pl.read_parquet() 创建 LazyFrame 以延迟执行和自动优化。
  3. 表达式构建:使用 pl.col() 引用列,通过 with_columns()filter()group_by() 链式调用构建计算图。
  4. 收集结果:调用 .collect() 触发优化后的查询计划并获取最终 DataFrame。

核心代码示例

安装与基本操作

uv pip install polars

import polars as pl

# 创建 DataFrame
df = pl.DataFrame({
    "name": ["Alice", "Bob", "Charlie"],
    "age": [25, 30, 35],
    "city": ["NY", "LA", "SF"]
})

# 选择列
df.select("name", "age")

# 过滤行
df.filter(pl.col("age") > 25)

# 添加计算列
df.with_columns(
    age_plus_10=pl.col("age") + 10
)

惰性求值与并行加速

# 懒加载 CSV(推荐用于大文件)
lf = pl.scan_csv("large.csv")

# 构建复杂查询
result = lf.filter(pl.col("age") > 25) \
    .select("name", "age", (pl.col("age") * 12).alias("months")) \
    .group_by("city").agg(pl.col("months").mean()) \
    .collect(streaming=True)  # 启用流式处理

从 Pandas 迁移的关键转换

Pandas 使用显式索引和即时求值,而 Polars 依赖整数位置、严格类型和惰性执行。以下示例展示迁移模式:

# Pandas 序列模式(慢)
df_pandas = df_pandas.assign(
    col_a=lambda df: df["value"] * 10,
    col_b=lambda df: df["value"] * 100
)

# Polars 并行模式(快)
df_polars = df.with_columns(
    col_a=pl.col("value") * 10,
    col_b=pl.col("value") * 100,
)

窗口函数与聚合

# 为每行添加组统计
df.with_columns(
    avg_age=pl.col("age").mean().over("city"),
    rank=pl.col("salary").rank().over("city")
)

下载和安装

下载 polars 中文版 Skill ZIP

解压后将目录放入你的 AI 工具 skills 文件夹,重启工具即可调用 Polars 加速脚本。详细用法参考内附文档。

你可能还需要

暂无推荐