高效使用Pandas:提升数据处理速度的七个技巧

世界杯梅西点球

循环很慢。如果你逐行遍历 DataFrame,那你就做错了。 为什么重要 Pandas 构建在 NumPy 之上,而 NumPy 针对快速的向量化操作进行了优化。这意味着……

循环很慢。如果你逐行遍历 DataFrame,那你就做错了。

为什么重要

Pandas 构建在 NumPy 之上,而 NumPy 针对快速的向量化操作进行了优化。这意味着你可以一次性对整个列进行计算,而不是使用循环。这种方式更快且更简洁。

解决方法

不要这样写:

import pandas as pddf = pd.DataFrame({'a': range(1, 6), 'b': range(10, 15)})df['c'] = [x * y for x, y in zip(df['a'], df['b'])]

要这样写:

df['c'] = df['a'] * df['b']

更快、更干净,且没有不必要的循环。

避免这个错误

.iterrows 看起来是个好主意,但其实很慢。使用向量化操作或 .apply(但仅在需要时使用,见技巧 #7)。

2. 使用 query 更快地过滤数据

问题

使用布尔条件过滤数据很快就会变得复杂。

解决方法

不要这样写:

df[(df['a'] > 2) & (df['b'] < 14)]

要这样写:

df.query('a > 2 and b < 14')

更易读,且运行速度更快。

专业提示

如果需要在 .query 中使用变量,请使用 @:

threshold = 2df.query('a > @threshold')

3. 使用 astype 节省内存

问题

大型 DataFrame 会消耗大量内存。

解决方法

尽可能降级数据类型:

df['a'] = df['a'].astype('int8')

使用以下命令检查内存使用情况:

df.info

注意

降级浮点数可能会导致精度损失。除非需要 float64,否则请使用 float32。

4. 轻松处理缺失数据

问题

NaN 值会破坏计算。

解决方法

删除它们:df.dropna

填充它们:df.fillna(0)

插值:df.interpolate

专业提示

插值在处理时间序列数据时非常有用。

5. 使用 groupby 更高效地处理数据

问题

手动汇总数据是浪费时间。

解决方法

使用 groupby 快速聚合数据:

df.groupby('category')['sales'].sum

需要多重聚合?使用 .agg:

df.groupby('category').agg({'sales': ['sum', 'mean']})

你知道吗?

你还可以使用 transform将聚合值添加回原始 DataFrame,而不会丢失原始行结构:

df['total_sales'] = df.groupby('category')['sales'].transform('sum')

6. 合并 DataFrame 而不拖慢代码

问题

不当的连接操作会拖慢一切。

解决方法

正确使用 merge:

df_merged = df1.merge(df2, on='id', how='inner')

最佳实践

如果要保留第一个 DataFrame 中的所有记录,请使用 how='left'。

性能提示

对于大型 DataFrame,确保连接键已索引以加快合并速度:

df1.set_index('id', inplace=True)df2.set_index('id', inplace=True)df_merged = df1.join(df2, how='inner')

7. 正确使用 .apply(并避免过度使用)

问题

.apply 功能强大,但经常被误用。

解决方法

将其用于复杂的逐行操作:

df['new_col'] = df['a'].apply(lambda x: x**2 if x > 2 else x)

但如果只是修改单列,请改用 .map,它更快。

避免这个错误

不要在使用向量化操作可以完成任务时使用 .apply。.apply 比 Pandas 内置函数慢。

最后总结

这些技巧可以让你的 Pandas 工作流程更加顺畅、快速且易于阅读。不再有不必要的循环,不再有缓慢的连接,只有干净、高效的代码。

在你的下一个项目中试试这些技巧。如果你想进一步探索,请查看官方 Pandas 文档。

下一步建议:

在你的数据集上尝试这些技巧

学习 Pandas 中的多级索引,以实现更强大的数据操作

如果你处理的数据集太大,无法放入内存,可以探索 Dask

官方 Pandas 文档:https://pandas.pydata.org/docs/

Jake VanderPlas 的《Python 数据科学手册》:https://jakevdp.github.io/PythonDataScienceHandbook/

NumPy 文档:https://numpy.org/doc/stable/

高效 Pandas:性能优化的最佳实践:https://realpython.com/fast-flexible-pandas/

Wes McKinney 的 Pandas 性能提示:https://wesmckinney.com/blog/

Dask 用于并行计算与 Pandas:https://docs.dask.org/en/stable/dataframe.html

返回搜狐,查看更多