具有标量结果的 Pandas 总和列为零

Posted

技术标签:

【中文标题】具有标量结果的 Pandas 总和列为零【英文标题】:Pandas sum column with scalar results in zeros 【发布时间】:2016-01-28 09:48:20 【问题描述】:

我将 pandas 数据帧的一列与一个标量相加,结果是一列全为零。奇怪的是,有时它会返回零,有时则不会。如果有人告诉我这个我不会相信,这就是为什么我制作了一个视频来展示这个结果:

https://dl.dropboxusercontent.com/u/15853805/pandas%20bug.mp4

谁能解释一下这个黑魔法?我对pandas 失去了信任,我真的需要它来工作。

使用这段代码我可以得到类似的错误:

import pandas as pd
import numpy as np
from pdb import set_trace as pdb

for _ in xrange(100):
    data = np.random.randint(1,100000,1000000)
    df = pd.DataFrame(data,columns=['column'])
    scalar = np.random.randint(1,100000)
    df.column += scalar
    if df.column.max()==0:
        pdb()

我的数据变量被零填满。是内存问题吗?如果我的数据较小,则不会发生这种情况,但我需要以安全的方式处理大数据!

>> print pandas.__version__
0.17.1
>> print numpy.__version__
1.10.1

Python 2.7.11 |Anaconda 2.4.1 (64-bit)

【问题讨论】:

请发布代码以重现您的问题。 这种情况发生在我无法传输的庞大数据集上。我将尝试使其与一些合成数据集一起使用。但正如您所见,代码很简单 df['column']+scalar @FabioLamanna 我无法重现您的错误,对我来说它工作正常,并且我获得了一个非零值的数据框。你可以发布你的 python、numpy、pandas 版本吗? 人们能解释一下为什么他们不赞成这个吗?这是一个严重的问题..! 我无法重现这个。我猜这是你的电脑/安装上的东西。 【参考方案1】:

问题在于我的numexpr=2.4.4 版本更新到numexpr=2.4.6 解决了这个问题。 Github问题:https://github.com/pydata/pandas/issues/12167

【讨论】:

以上是关于具有标量结果的 Pandas 总和列为零的主要内容,如果未能解决你的问题,请参考以下文章

pandas 比较引发 TypeError:无法将 dtyped [float64] 数组与 [bool] 类型的标量进行比较

加快pandas groupby中的滚动总和计算

pandas.DataFrame.fillna - TypeError:只有整数标量数组可以转换为标量索引

将列表中具有零值的多个列添加到 Pandas 数据框中

删除 Pandas 中与相邻点偏差太大的点

如何将标量 Pyspark UDF 转换为 Pandas UDF?