Pandas数据框计算的不稳定性

5
我想知道是否有人在Pandas中遇到过这个问题。基本上,我试图逐元素添加、乘以和除以DataFrame(所有框架都具有相同的索引和列),但是Pandas针对连续执行的同一计算输出不同的结果。
下面显示了一些示例输出的图像。我在下面的代码中使用了.values,因为它是用于显示目的,但是当使用.add()、.mul()或.div()时,不稳定性可能会发生。例如,如果我反复输入N11.add(N00),我通常会得到正确的答案,但偶尔(每4或5次)会得到一个填充为0的DataFrame。

enter image description here

如果有影响的话,我在Windows 10上使用Anaconda分发Pandas 0.17.0(在Spyder 2.3.7上使用Python 2.7.10)。 我正在处理的数据框架很大(6856 x 12511)。是否有人遇到过这个问题?这是已知的问题还是我做错了什么?


有趣 - 你能否用较小的数据框重现这种行为,并将它们作为问题的一部分发布在这里? - Alex Riley
(如果你只是在乘法运算NumPy数组,那可能是一个NumPy问题。) - Alex Riley
好的,我试着用一个更小的 10x10 的框架,经过近100次尝试后,无法复现。因此,也许大小在这里很重要。 - Arisdawdle
这确实非常奇怪,因为实际值远非零。但如果没有可重现的示例,很难进行调试。 - BrenBarn
如果你创建一个临时变量,比如 tmp = (N11+N00+N01+N10).values,然后反复执行 tmp*tmp,是否会出现错误?我想知道这是否由于某种时间问题,因为你在同一表达式中两次访问了相同的 .values,可能会与垃圾回收器或其他东西产生交互。 - BrenBarn
好主意BrenBarn。我刚试了一下,奇怪的是我的第一个分配 tmp (tmp = (N11+N00+N10+N01).values) 全部变成了零,所以我不得不重新输入这行代码,才能得到正确的值。从那里开始,大约经过50次调用后,我就能够毫无问题地使用 tmp*tmptmp+tmp 了。 - Arisdawdle
1个回答

3

我今天遇到了类似的问题,原因是numexpr 2.4.4中的一个错误。据报告,在this pandas ticket和其他相关链接中,它似乎以各种方式影响着其他pandas用户。

将numexpr升级到2.4.6解决了我们的问题,但看起来任何不是2.4.4版本的都应该没问题!


谢谢mactyr!看起来问题已经解决了。由于一些奇怪的原因,这个问题在一段时间内自行消失了。在此期间,我多次重新安装Anaconda,但与此问题无关。所以我认为这个问题可能是由于重新安装引起的。但突然地,昨天Windows进行了一次更新,结果所有的东西又都崩溃了。我将numexpr升级到v2.5后问题得到了完美解决。真是一个奇怪的bug啊! - Arisdawdle
@user3111891,是的,我认为在我链接的numexpr票证中提到了这个问题是特定于Windows的;它可能与特定的更新有关,或者只是系统整体状态的某些问题。既然你似乎同意这个答案解决了问题,你能把它标记为已接受吗?我不是一个很大的stackoverflow用户,但能因为出色的工作获得一点声望会很不错! :) (http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work) - mactyr
嗨mactyr,是的,抱歉,我一直在尝试这样做,但由于我对stackoverflow不熟悉,我尝试点击了上箭头,但被网站拒绝了,因为我自己也太新手了。现在我看到了勾选框,很高兴能给你颁发大奖(恭喜!),感谢你的分享! - Arisdawdle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接