我想你需要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
同樣的參數值ddof
在type
是std
int
。
如果使用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
我不知道是肯定的,但我懷疑「關口」需要被顯式聲明爲整數或列表需要被聲明爲一個整數數組(所以編譯器可以做一個關於列的假設)。只是一個猜測。 – ouflak