1秒处理1亿行这8个Python库让Excel彻底退场

作者:互联网

2026-03-20

Excel

面对Excel在数据处理中的种种局限,如格式混乱和大文件卡顿等问题,Python生态提供了更高效的解决方案。

所以,我整理了一套 Python 工具栈。它们不搞花哨的噱头,只解决具体的问题。

DuckDB:轻松搞定亿级数据

如果在单机上处理几百兆到几 GB 的数据,Pandas 的内存占用简直让我抓狂。DuckDB 的出现填补了 SQLite 和分布式数据库之间的空白。它是一个进程内的 OLAP 数据库,最大的特点是零配置和向量化计算。

DuckDB 可以直接对 CSV、Parquet 或 JSON 文件执行 SQL 查询,无需将数据全部加载到内存。

import duckdb

# 直接对 Parquet 文件执行 SQL,无需建库建表
# 这里的 query 类似于 Pandas 的 dataframe,但计算是在 DuckDB 引擎中完成的
result = duckdb.sql("""
    SELECT 
        department, 
        AVG(salary) as avg_salary 
    FROM 'employees.parquet' 
    WHERE join_date > '2022-01-01'
    GROUP BY department
    ORDER BY avg_salary DESC
""").df()

print(result)

Ibis:写一次代码,到处运行

Ibis 和 DuckDB 是目前数据工程领域的黄金搭档。

Ibis 将业务逻辑与执行引擎分离,这也是它的核心。可以使用类似 Pandas 的 Python API 来编写查询逻辑,后端可以无缝切换为 DuckDB、ClickHouse、BigQuery 甚至是 PySpark。

使用 Ibis 驱动 DuckDB 时,既享受了 Python 代码的优雅和类型检查,又利用了 DuckDB 极速的执行引擎。一举两得,棒棒哒。

import ibis

# 连接到 DuckDB 后端(也可以是 SQLite, Postgres 等)
con = ibis.duckdb.connect()

# 惰性读取数据,此时并未真正加载
table = con.read_csv("sales_data.csv")

# 构建查询表达式
expr = (
    table.filter(table["status"] == "completed")
         .group_by("region")
         .aggregate(total_revenue=table["amount"].sum())
         .order_by(ibis.desc("total_revenue"))
)

# 只有调用 execute() 时才会生成 SQL 并执行
print(expr.execute())

Polars:多线程时代的 DataFrame

Pandas 是单线程的,而 Polars 是用 Rust 编写的,天生支持并行计算。在处理大规模数据集时,Polars 的速度通常比 Pandas 快数倍。

它的设计理念采用了“惰性求值”(Lazy Evaluation),先构建查询计划,经优化器优化后再执行,这能极大减少内存开销。

import polars as pl

# 扫描文件而非读取,启用 Lazy 模式
q = (
    pl.scan_csv("large_dataset.csv")
    .filter(pl.col("age") > 30)
    .select(["name", "salary", "department"極速安裝:ServBay 點擊即可安裝好包含常用組件的開發環境。
  • 全版本支持:支持從最新 Python 3.x 到早期 Python 2.x 版本。
  • 環境隔離:獨立於系統環境,避免污染系統自帶 Python。
  • 數據處理的邊界正被這些工具不斷拓展,掌握核心技術並搭配高效工具,才能持續提升開發效率。

    相关标签:

    1秒处理1亿行,这8个Python库彻底让Excel消失