2016-09-23 111 views
0

所以我這一堆用NA數據在其中值NA值?這樣z分數輸出看起來像這樣?計算Z值的數據一堆,但不包括NA

Z-Score value output

所以這是我,這是基於前面的問題:

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.") 

,但我得到了類型錯誤。

請幫忙,我真的是這個初學者。

+0

我不知道是肯定的,但我懷疑「關口」需要被顯式聲明爲整數或列表需要被聲明爲一個整數數組(所以編譯器可以做一個關於列的假設)。只是一個猜測。 – ouflak

回答

1

我想你需要replace第一N.A.NaN和值轉化爲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 

同樣的參數值ddoftypestdint


如果使用read_csv,參數na_values原因轉換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