【发布时间】:2021-01-30 06:33:22
【问题描述】:
我编写了一些 Python 代码,大量使用了 pandas 库。代码似乎有点慢,所以我通过 cProfile 运行它以查看瓶颈在哪里。 根据 cProfile 结果,瓶颈之一是对 pandas.lib_scalar_compare 的调用:
1604 262.301 0.164 262.301 0.164 {pandas.lib.scalar_compare}
我的问题是 - 在什么情况下会调用它?当我选择 DataFrame 的一部分时,我假设它。 这是我的代码的样子:
if (var=='9999'):
dataTable=resultTable.ix[(resultTable['col1'] == var1)
& (resultTable['col2']==var2)].copy()
else:
dataTable=resultTable.ix[(resultTable['col1'] == var1)
& (resultTable['col2']==var2)
& (resultTable['col3']==int(val3))].copy()
我有以下问题:
- 是sn-p代码最终调用了导致瓶颈的代码吗?
- 如果是这样,是否有任何优化? 我目前使用的 pandas 版本是 pandas-0.8。
对此的任何帮助将不胜感激。
【问题讨论】:
-
.copy()在这种情况下不做任何事情,不这样做会加快速度略微。大概这不是你的全部代码...... -
我不确定您的数据框有多大,但您可以取消堆叠 ResultTable 并使用多索引元组访问它