2015-09-04 4 views
0

У меня есть серия pandas с foll. value_counts выхода():Серия Pandas для ошибки преобразования массива numpy

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

Когда я выполняю описать() на этой серии, я получаю:

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 

Однако, если я пытаюсь найти минимум и максимум, я получаю нана как ответ:

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

Кроме того, когда я пытаюсь т преобразовать его в массив Numpy, я, кажется, чтобы получить массив с только Нэн

numpy.array(df[col_name]) 

Любое предложение о том, как конвертировать из серии панд в Numpy массива успешно

+1

'df [col_name] .values' вернет массив numpy. Если у вас есть NaN в данных, он распространяется с использованием функции numpy.min. Значение, если есть NaN, np.min всегда будет давать NaN в качестве anser. Попробуйте nanmin http://docs.scipy.org/doc/numpy/reference/generated/numpy.nanmin.html#numpy.nanmin –

+1

'min' любого массива, содержащего' nan', также является 'nan'. Чтобы игнорировать значения 'nan', попробуйте' np.nanmin (df [col_name] .values) '(или просто' df [col_name] .min() '). –

+0

Спасибо, но я также получаю nan для этого: numpy.array (df [col_name]). Min() – user308827

ответ

2

Обе функции np.min и метод np.ndarray.min всегда возвращает NaN для любого массива, который содержит одно или несколько значений NaN (это стандартная IEE754 с плавающей точкой поведение).

Вы можете использовать np.nanmin, который игнорирует значения NaN при вычислении мин, например:

np.nanmin(df[col_name].values) 

Еще более простой вариант просто использовать pd.Series.min() метод, который уже игнорирует значения NaN, то есть:

df[col_name].min() 

Я понятия не имею, почему numpy.array(df[col_name]) вернет массив, содержащий только NaN, если только df[col_name] уже содержит только NaN. Я предполагаю, что это должно быть связано с другой ошибкой в ​​вашем коде.