为什么NaNs在试图找到Min&列中的最大值?

时间:2017-05-14 18:33:18

标签: python pandas

加载数据集

dataImf  = pd.read_csv('/home/anubhav/datasets/lifesat/gdp_per_capita.csv', thousands=',', delimiter='\t', encoding='latin1',na_values='n/a')

在每列中收集了唯一条目。

dum11,dum22,dum33 = dataImf.Country.unique() , dataImf['GDP per capita'].unique() , dataImf['Estimates Start After'].unique()

最小,最大,唯一条目的长度&如果需要,打印。

print(dum22.min(),"-->",dum22.max(),len(dum22),"\n",np.sort(dum22),"\n")
#nan --> nan 188

print(dataImf['GDP per capita'].min(),"-->",dataImf['GDP per capita'].max(),len(dum22),"\n",np.sort(dum22),"\n")
#220.86 --> 101994.093 188

print(dum33.min(),"-->",dum33.max(),len(dum33),"\n",np.sort(dum33),"\n")
#nan --> nan 17

print(dataImf['Estimates Start After'].min(),"-->",dataImf['Estimates Start After'].max(),len(dum33),"\n",np.sort(dum33),"\n")
#0.0 --> 2015.0 17

问题:如果我拿出独特的值然后尝试获得最小值。 &安培;最大,它输出NaN,但如果我不应用任何unique()方法并使用df ['col_name']。min()或max(),它会输出正确的值。 (我从列的所有'n'个实例中获取了不同的值,以通过避免冗余搜索来减少对最小或最大函数的搜索。) 请注意为什么在考虑unique()方法之后输出是NaNs。

1 个答案:

答案 0 :(得分:0)

Series.unique返回一个numpy数组:

df = pd.DataFrame({'A': [1, 2, 3, np.nan]})

df
Out: 
     A
0  1.0
1  2.0
2  3.0
3  NaN

df['A'].unique()
Out: array([  1.,   2.,   3.,  nan])

现在,您在df['A'].unique()上调用的方法将是一个numpy方法。如果数组中有nan,则ndarray.min()会返回nanpd.Series.min()会返回忽略nan的最小值。

如果要使用该阵列,则需要使用nanmin

df['A'].unique().min()
Out: nan


np.nanmin(df['A'].unique())
Out: 1.0

或将结果转换为系列:

pd.Series(df['A'].unique()).min()
Out: 1.0