HoRain云--Pandas 性能优化实战:10 个技巧让数据分析快 10 倍
2026/9/14 18:54:12 网站建设 项目流程

1. 使用合适的数据类型

默认 int64、float64 占用大量内存。转换:

python

复制

下载

df["age"] = df["age"].astype("int8") df["category"] = df["category"].astype("category")

内存可下降 50% 以上。

2. 避免 iterrows

iterrows极慢。优先向量化:

python

复制

下载

# 慢 for i, row in df.iterrows(): df.at[i, "total"] = row["price"] * row["qty"] # 快 df["total"] = df["price"] * df["qty"]

3. 使用 query 和 eval

python

复制

下载

df.query("age > 30 and city == 'Beijing'") df.eval("total = price * qty", inplace=True)

底层使用 numexpr,速度快、内存低。

4. 分块读取大文件

python

复制

下载

chunks = pd.read_csv("big.csv", chunksize=100_000) for chunk in chunks: process(chunk)

5. 只读取需要的列

python

复制

下载

pd.read_csv("data.csv", usecols=["id", "name", "price"])

6. 使用 category 类型

对于重复率高的字符串列,category 可大幅节省内存并加速 groupby。

7. 避免链式赋值

python

复制

下载

# 不推荐 df[df["age"] > 30]["score"] = 100 # 推荐 df.loc[df["age"] > 30, "score"] = 100

8. 使用 groupby 聚合优化

python

复制

下载

df.groupby("city", observed=True)["sales"].sum()

observed=True对 category 列很重要。

9. 并行处理

使用pandarallelswifter

python

复制

下载

from pandarallel import pandarallel pandarallel.initialize() df.parallel_apply(func, axis=1)

10. 考虑 Polars

Polars 基于 Rust,支持多线程和惰性执行:

python

复制

下载

import polars as pl df = pl.read_csv("big.csv") result = df.filter(pl.col("age") > 30).group_by("city").agg(pl.col("sales").sum())

在百万行以上数据中,Polars 往往比 Pandas 快数倍。

11. 实战案例

某电商订单数据 500 万行,原始 Pandas 处理耗时 120 秒。优化后:

  • 数据类型转换:内存从 2.1GB 降到 800MB。

  • 向量化替换 iterrows:耗时从 80 秒降到 3 秒。

  • 分块读取 + category:整体降到 15 秒。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询