Вычислить среднее значение фрейма данных, пропустив определенные значения в Python / Pandas

Мне нужно вычислить среднее значение первого столбца фрейма данных, и я могу сделать это с помощью метода mean(). Проблема: иногда в данных есть -9999 значений, обозначающих отсутствующие наблюдения. Я знаю, что значения NaN по своей сути пропускаются при вычислении среднего в Pandas, но, конечно, это не относится к значениям -9999.

Вот код, который я пробовал. Он вычисляет среднее значение столбца, но с учетом значения -9999 в расчетах:

df=pandas.DataFrame([{2,4,6},{1,-9999,3}])
df[0].mean(skipna=-9999)

но это дает среднее значение -4998,5, которое, очевидно, получается с учетом -9999 в расчетах.


person multigoodverse    schedule 27.01.2015    source источник
comment
Извините, вы не дали столбцам никаких имен, поэтому вам нужно среднее значение столбца или строки   -  person EdChum    schedule 28.01.2015
comment
Ok. Отредактировал вопрос, явно указав столбцы   -  person multigoodverse    schedule 28.01.2015


Ответы (2)


skipna arg - это логическое значение, определяющее, следует ли исключать значения NA / NULL, а не какие значения игнорировать:

skipna : boolean, default True
    Exclude NA/null values. If an entire row/column is NA, the result
    will be NA

Если я понимаю, что вы пытаетесь сделать, вы можете заменить -9999 на NaN:

In [41]: df[0].replace(-9999, np.nan)
Out[41]: 
0     2
1   NaN
Name: 0, dtype: float64

In [42]: df[0].replace(-9999, np.nan).mean()
Out[42]: 2.0
person DSM    schedule 27.01.2015

skipna должно быть истинным или ложным, а не значением, которое следует пропустить.

при чтении ваших данных нормализуйте и замените -9999 на n / a.

person mnagel    schedule 27.01.2015