我有一些数据框,它们以物种指示符作为列,在这些示例中为30,以及数量可变的行,这里的示例是450_631(* low )和948_084( high *)。实际上,我有成千上万个这样的数据框,这就是为什么性能对我很重要。
Dataframe 包含0和1。
low DataFrame
| | 智人13|泛_泛13|...|山羊_山羊.12|马_卡巴鲁斯.17|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 无|无|无|...|1个|无|
| 1个|无|无|...|无|无|
| ...|...|...|...|...|...|
| 小行星450629|无|无|...|无|1个|
| 小行星450630|无|无|...|无|无|
high DataFrame
| | 人类20|大猩猩_大猩猩.20|...|猕猴属10|美洲豹_豹. KV860304.1|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 无|无|无|...|无|无|
| 1个|无|无|...|1个|无|
| ...|...|...|...|...|...|
| 小行星948|无|1个|...|1个|1个|
| 小行星948|无|1个|...|1个|1个|
例如,我现在要做的是用Pandas函数cumsum来计算累积和。
我观察到的是,对于"小" Dataframe ,如示例 * low *,它只需要几分之一秒,然而,对于一些较大的 Dataframe ,如示例 * high *,它需要几分钟,尽管它的数据量大约是示例 * high * 的两倍。
low cumsum,计算耗时约0.2秒
| | 智人13|泛_泛13|...|山羊_山羊.12|马_卡巴鲁斯.17|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 无|无|无|...|1个|无|
| 1个|无|无|...|1个|无|
| ...|...|...|...|...|...|
| 小行星450629|无|小行星2606|...|小行星73099|小行星72252|
| 小行星450630|无|小行星2606|...|小行星73099|小行星72252|
high cumsum,计算耗时约150秒
| | 人类20|大猩猩_大猩猩.20|...|猕猴属10|美洲豹_豹. KV860304.1|
| - ------|- ------|- ------|- ------|- ------|- ------|
| 无|无|无|...|无|无|
| 1个|无|无|...|1个|无|
| ...|...|...|...|...|...|
| 小行星948|无|小行星8463|...|小行星39761|小行星239|
| 小行星948|无|小行星8464|...|小行星39762|小行星239|
我在复制(DataFrame.copy())或索引(DataFrame [list_of_indexs])时观察到了类似的模式,我不明白为什么对这些较大的DataFrame的某些操作与对较小的DataFrame的操作相比需要不合理的更长时间。
- 编辑:**
在我本地的笔记本电脑上运行了同样的过程,**high. cumsum()**在1.6秒内完成,这似乎很合理。这表明问题应该出在CPU或服务器如何工作上,这超出了我的理解范围。
- EIDT2:**
问题似乎出在我运行脚本的服务器上,在我的笔记本电脑或其他服务器(都是英特尔至强)上运行脚本时,运行正常,但只有在一台机器上发现了这种奇怪的行为。
从现在开始我就用另一台服务器了。
1条答案
按热度按时间t1qtbnec1#
我想知道为什么这个操作要花这么长时间。你确定你的 Dataframe 中只有数字数据吗?我的计算机(一个不错的I7第8代)只需要30秒就可以完成这个任务的 Dataframe 与1000列和900k行。
如果这不是类型的问题,你可以在执行此任务之前将 Dataframe 转换为numpy数组来加快速度:
这使得此任务的时间减少了约30%。