我和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数组的任何建议
答案 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()。“