循环很慢。如果你逐行遍历 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
返回搜狐,查看更多