Mam dataframe pandy z kolumną prawdziwych wartości, które chcę zscore normalizować:jak zscore znormalizować kolumnę pandy z nans?
>> 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})
Problemem jest to, że pojedyncza wartość nan
czyni cały wachlarz nan
:
>> from scipy.stats import zscore
>> zscore(df["a"])
array([ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan])
jaka jest prawidłowy sposób zastosowania zscore
(lub równoważnej funkcji nie z scipy) do kolumny pandasowej ramki danych i czy ignoruje wartości nan
? Chciałbym go mieć taki sam wymiar jak oryginalnej kolumny np.nan
dla wartości, które nie mogą być znormalizowane
zmienił: Być może najlepszym rozwiązaniem jest użycie scipy.stats.nanmean
i scipy.stats.nanstd
? Nie widzę, dlaczego stopnie swobody muszą być zmienione na std
do tego celu:
zscore = lambda x: (x - scipy.stats.nanmean(x))/scipy.stats.nanstd(x)
Jeśli chcesz uzyskać z_score na wszystkich DataFrame, można spróbować użyć tego: '' 'def z_score (DF): powrotny (DF-df.mean())/df.std (ddof = 0) '' 'i' '' df.apply (z_score) '' ' –