Pandas系列以numpy数组转换错误

时间:2015-09-04 20:40:42

标签: python numpy pandas

我和foll有一个熊猫系列。 value_counts输出():

NaN     2741
 197    1891
 127     188
 194      42
 195      24
 122      21

当我在这个系列上执行describe()时,我得到:

df[col_name].describe()
count    2738.000000
mean      172.182250
std        47.387496
min         0.000000
25%       171.250000
50%       197.000000
75%       197.000000
max       197.000000
Name: SS_D_1, dtype: float64

然而,如果我试图找到最小值和最大值,我会得到nan作为答案:

numpy.min(df[col_name].values)
nan

此外,当我尝试将其转换为numpy数组时,我似乎得到一个只有nan的数组

numpy.array(df[col_name])

有关如何成功将pandas系列转换为numpy数组的任何建议

2 个答案:

答案 0 :(得分:2)

函数np.min和方法np.ndarray.min将始终为包含一个或多个NaN值的任何数组返回NaN(这是标准的IEE754浮点行为)。

你可以使用np.nanmin,它在计算min时会忽略NaN值,例如:

np.nanmin(df[col_name].values)

更简单的选择就是使用pd.Series.min()方法,它已经忽略了NaN值,即:

df[col_name].min()

我不知道为什么numpy.array(df[col_name])会返回一个只包含NaN的数组,除非df[col_name]已经只包含NaNs。我认为这必定是由于你的代码中的其他一些错误。

答案 1 :(得分:1)

从pandas v 0.24.0开始-您可以使用.array.to_numpy来访问pandas系列的支持数组

pandas 0.24.x release notes Quote:“ Series.array 和Index.array已添加,用于提取支持Series或Index的数组...我们尚未删除或弃用Series.values或DataFrame.values,但我们< strong>强烈推荐并改用.array或.to_numpy()

...我们建议在需要存储在Series中的数据数组时使用Series.array,在知道需要NumPy数组时使用和Series.to_numpy()。