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。
答案 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()
会返回nan
。 pd.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