У меня есть фреймворк pandas с столбцом реальных значений, который я хочу нормализовать zscore:
>> a
array([ nan, 0.0767, 0.4383, 0.7866, 0.8091, 0.1954, 0.6307,
0.6599, 0.1065, 0.0508])
>> df = pandas.DataFrame({"a": a})
Проблема заключается в том, что одно значение nan
делает весь массив nan
:
>> from scipy.stats import zscore
>> zscore(df["a"])
array([ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan])
Какой правильный способ применить zscore
(или эквивалентную функцию не от scipy) к столбцу фрейма данных pandas и игнорировать значения nan
? Я хотел бы, чтобы это было то же измерение, что и исходный столбец с np.nan
для значений, которые не могут быть нормализованы
edit: возможно, лучшим решением является использование scipy.stats.nanmean
и scipy.stats.nanstd
? Я не понимаю, почему для этой цели необходимо изменить степень свободы для std
:
zscore = lambda x: (x - scipy.stats.nanmean(x)) / scipy.stats.nanstd(x)