pandas数据框中返回inf的列的mean():如何解决这个问题?

2024-04-25 20:17:27 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试实现一些机器学习算法,但我有一些困难,把数据放在一起。

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

对于许多数据集,我只是使用:

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

但是对于这个特定的数据集,上面的方法不起作用。问题是mean函数返回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()

我的问题是如何处理这件事。似乎我需要改变这个专栏的类型,但我不知道怎么做。


Tags: 数据算法机器示例colmeaninfprint
3条回答

如果pandas系列的元素是字符串,则得到inf和平均结果。在这种特定情况下,您只需将pandas系列元素转换为float,然后计算平均值。不需要使用numpy。

示例:

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

在计算pandas.Series的平均值时,NaN值应该无关紧要。精确性也无关紧要。我能想到的唯一解释是valores中的一个值等于无穷大。

当计算如下平均值时,可以排除任何无穷大的值:

import numpy as np

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

不太熟悉熊猫,但如果你转换成一个numpy数组,它会工作,尝试

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

相关问题 更多 >