2016-09-23 3 views
0

Also habe ich dieses Bündel von Daten mit NA-Werte in ihnen:berechnen z-Score in Daten Haufen aber ohne NA

Data Dump

So wie ich die Z-Score von jeder Spalte erhalten, während die Ausnahme NA-Werte? So dass die Z-Score-Ausgabe so aussieht?

Z-Score value output

für das so ist, was ich habe, die sich auf frühere Anfragen basiert:

cols = list(df.columns) 
df[cols] 
for col in cols: 
    col_zscore = col + '_zscore' 
    df[col_zscore] = (df[col] - df[col].mean())/df[col].std(ddof="N.A.") 

aber ich habe Typeerror.

Bitte helfen Sie, ich bin wirklich ein Anfänger dabei.

+0

Ich weiß es nicht genau, aber ich vermute, dass ‚col‘ explizit als Integer deklariert werden muss oder dass Liste muss als ein Array von ganzen Zahlen deklariert werden (so dass der Compiler eine Annahme über col machen kann). Nur eine Vermutung. – ouflak

Antwort

1

Ich glaube, Sie brauchen replace erste N.A.-NaN und konvertieren Werte float:

df = df.replace({'N.A.': np.nan}).astype(float) 

for col in df.columns: 
    if col != 'PE Trail': 
     col_zscore = col + '_zscore' 
     df[col_zscore] = (df[col] - df[col].mean())/df[col].std() 

print (df) 
    PE Trail PE fwd PB PE fwd_zscore PB_zscore 
0  NaN 1.00 1.0  1.317465 0.707107 
1  NaN 0.50 NaN  0.146385  NaN 
2  NaN 0.00 0.5  -1.024695 -0.707107 
3  NaN 0.25 NaN  -0.439155  NaN 

Auch type der Wert in Parameter ddof in std ist int.


Wenn Verwendung read_csv, Parameter na_values Ursachen Umwandlung N.A.-NaN:

import pandas as pd 
import numpy as np 
import io 

temp=u"""PE Trail;PE fwd;PB 
N.A.;1;1 
N.A.;0.5;N.A. 
N.A.;0;0.5 
N.A.;0.25;N.A.""" 
#after testing replace io.StringIO(temp) to filename 
df = pd.read_csv(io.StringIO(temp), sep=";", na_values='N.A.') 
print (df) 
    PE Trail PE fwd PB 
0  NaN 1.00 1.0 
1  NaN 0.50 NaN 
2  NaN 0.00 0.5 
3  NaN 0.25 NaN