pandas DataFrame 中列的 mean() 返回信息:我该如何解决这个问题?
mean() of column in pandas DataFrame returning inf: how can I solve this?
我正在尝试实施一些机器学习算法,但在整理数据时遇到了一些困难。
在下面的例子中,我从 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()
我的问题是如何处理这个问题。看来我需要更改此列的类型,但我不知道该怎么做。
不太熟悉 pandas 但是如果你转换成一个 numpy 数组它可以工作,试试
np.asarray(valores.iloc[:,5], dtype=np.float).mean()
NaN
值在计算 pandas.Series
的平均值时应该无关紧要。精度也无关紧要。我能想到的唯一解释是 valores
中的一个值等于无穷大。
您可以像这样计算平均值时排除任何无穷大的值:
import numpy as np
is_inf = valores.iloc[:, 5] == np.inf
valores.ix[~is_inf, 5].mean()
我在数据类型为 'o' 且最大值为 9999 的列上遇到了同样的问题。您是否尝试过使用带有 convert_numeric=True
参数的 convert_objects
方法?这为我解决了问题。
如果 pandas 系列的元素是字符串,您将得到 inf
和平均结果。在这种特定情况下,您可以简单地将 pandas 系列元素转换为 float
,然后计算平均值。无需使用 numpy。
示例:
valores.iloc[:,5].astype(float).mean()
我正在尝试实施一些机器学习算法,但在整理数据时遇到了一些困难。
在下面的例子中,我从 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()
我的问题是如何处理这个问题。看来我需要更改此列的类型,但我不知道该怎么做。
不太熟悉 pandas 但是如果你转换成一个 numpy 数组它可以工作,试试
np.asarray(valores.iloc[:,5], dtype=np.float).mean()
NaN
值在计算 pandas.Series
的平均值时应该无关紧要。精度也无关紧要。我能想到的唯一解释是 valores
中的一个值等于无穷大。
您可以像这样计算平均值时排除任何无穷大的值:
import numpy as np
is_inf = valores.iloc[:, 5] == np.inf
valores.ix[~is_inf, 5].mean()
我在数据类型为 'o' 且最大值为 9999 的列上遇到了同样的问题。您是否尝试过使用带有 convert_numeric=True
参数的 convert_objects
方法?这为我解决了问题。
如果 pandas 系列的元素是字符串,您将得到 inf
和平均结果。在这种特定情况下,您可以简单地将 pandas 系列元素转换为 float
,然后计算平均值。无需使用 numpy。
示例:
valores.iloc[:,5].astype(float).mean()