Ho un dataframe panda con una colonna di valori reali che voglio Zscore normalizzare:come zscore normalizzare la colonna panda con 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})
Il problema è che un singolo valore nan
fa tutta la matrice nan
:
>> from scipy.stats import zscore
>> zscore(df["a"])
array([ nan, nan, nan, nan, nan, nan, nan, nan, nan, nan])
Qual è la modo corretto per applicare zscore
(o una funzione equivalente non da scipy) a una colonna di un dataframe panda e far ignorare i valori nan
? Mi piacerebbe che fosse stessa dimensione colonna originale con np.nan
per i valori che non possono essere normalizzato
modificare: forse la soluzione migliore è quella di utilizzare scipy.stats.nanmean
e scipy.stats.nanstd
? Non vedo il motivo per cui i gradi di libertà devono essere cambiate per std
per questo scopo:
zscore = lambda x: (x - scipy.stats.nanmean(x))/scipy.stats.nanstd(x)
Se si desidera ottenere lo z_score su tutti dataframe, si può provare a usare questo: '' 'def z_score (df): ritorno (df-df.mean())/df.std (ddof = 0) '' 'e' '' df.apply (z_score) '' ' –