pandas DataFrame中的列的mean()返回inf:我该如何解决这个问题?

时间:2015-06-11 13:44:34

标签: python numpy pandas precision

我试图实现一些机器学习算法,但我在将数据放在一起时遇到了一些困难。

在下面的示例中,我从UCI加载示例数据集,删除缺少数据的行(感谢上一个问题的帮助),现在我想尝试规范化数据。

对于许多数据集,我刚刚使用过:

valores = (valores - valores.mean()) / (valores.std())

但对于这个特定的数据集,上述方法并不起作用。问题是,平均函数返回inf,可能是由于精度问题。请参阅以下示例:

bcw = pd.read_csv('http://archive.ics.uci.edu/ml/machine-learning-databases/breast-cancer-wisconsin/breast-cancer-wisconsin.data', header=None)

for col in bcw.columns:
    if bcw[col].dtype != 'int64':
        print "Removendo possivel '?' na coluna %s..." % col
        bcw = bcw[bcw[col] != '?']

valores = bcw.iloc[:,1:10]
#mean return inf
print  valores.iloc[:,5].mean()

我的问题是如何处理这个问题。我似乎需要更改此列的类型,但我不知道该怎么做。

4 个答案:

答案 0 :(得分:3)

不太熟悉pandas,但是如果你转换成numpy数组就可以了,试试

np.asarray(valores.iloc[:,5], dtype=np.float).mean()

答案 1 :(得分:2)

计算NaN的平均值时,

pandas.Series值无关紧要。精度也无关紧要。我能想到的唯一解释是valores中的一个值等于无穷大。

您可以在计算平均值时排除任何无限值,如下所示:

import numpy as np

is_inf = valores.iloc[:, 5] == np.inf
valores.ix[~is_inf, 5].mean()

答案 2 :(得分:0)

我遇到的问题是dtype' o'列,其最大值为9999.您是否尝试将convert_objects方法与convert_numeric=True参数一起使用?这解决了我的问题。

答案 3 :(得分:0)

如果熊猫系列的元素是字符串,您将得到inf及其平均结果。在这种特定情况下,您可以简单地将熊猫系列元素转换为float,然后计算均值。无需使用numpy。

示例:

valores.iloc[:,5].astype(float).mean()