pyt*_*eer 7 python performance numpy pandas dask
pivot_table我在大型数据集(1000 万行,6 列)上使用 Pandas函数。由于执行时间至关重要,因此我尝试加快流程。目前,处理整个数据集大约需要 8 秒,这太慢了,我希望找到替代方案来提高速度/性能。
我当前的 Pandas 数据透视表:
df_pivot = df_original.pivot_table(index="industry", columns = "months",
values = ["orders", "client_name"],
aggfunc ={"orders": np.sum, "client_name": pd.Series.nunique})
Run Code Online (Sandbox Code Playgroud)
df_original包括所有数据(10m 行,从 csv 导入)。行业为客户所在行业,月份为订单月份(1月至12月),订单为订单数量。categorical除订单数(数据类型)外,所有数据均转换为数据int。最初,行业、月份和客户名称都是字符串。
我尝试使用pandas.DataFrame.unstack- 速度更慢。我也尝试过Dask。产生dask pivot_table了一些改进(6 秒执行时间 - 因此少了 2 秒)。然而,它仍然很慢。是否有更快的替代方案(对于大型数据集)?groupy也许用, ,重新创建数据透视表crosstab...不幸的是,我根本没有找到可以工作的替代方案,而且我对 Python 和 Pandas 仍然很陌生...期待您的建议。提前致谢!
更新:
我通过以下方式找出了 groupby 方式:
df_new = df_original.groupby(["months", "industry"]).agg({"orders": np.sum, "client_name": pd.Series.nunique}).unstack(level="months").fillna(0)
Run Code Online (Sandbox Code Playgroud)
现在速度快得多,大约需要 2-3 秒。还有一些选项可以进一步提高速度吗?
小智 2
将月份和行业列转换为分类列: https: //pandas.pydata.org/pandas-docs/stable/user_guide/categorical.html 这样您就可以避免大量字符串比较。
| 归档时间: |
|
| 查看次数: |
16087 次 |
| 最近记录: |