如何将 DataFrame 列转置为零均值和一个标准差

How to transpose DataFrame column to a zero mean and one standard deviation

我正在尝试调整一些列以使其平均值为 0 和 1 SD。但我不知道该怎么做。

例如给定以下数据框,如何创建均值 0 和 sd 1 的新列?

df = pd.DataFrame([8.2,18,15,9], columns=['temp'])

这是我用 Standard Scaler 试过的东西

from sklearn.preprocessing import StandardScaler

df = pd.DataFrame([[8.2,57],[18,60],[15,45],[9,30]], columns=['temp','rh'])
print(df)
scaler = StandardScaler(copy=False, with_mean=True, with_std=True)
scaler.fit(df)
print(f"Means: {scaler.mean_}")
df2 = scaler.transform(df)
print(f"Transformed Data Frame:\n{df2}")
m = np.mean(df2, axis=0)
s = np.std(df2, axis=0)
print(f"Column  means:\n{m}")
print(f"Column  SD:\n{s}")

但结果根本不是零均值或 sd=1。

   temp  rh
0   8.2  57
1  18.0  60
2  15.0  45
3   9.0  30
Means: [12.55 48.  ]
Transformed Data Frame:
[[-1.06105451  0.76200076]
 [ 1.32936715  1.01600102]
 [ 0.59760542 -0.25400025]
 [-0.86591805 -1.52400152]]
Column  means:
[-2.49800181e-16  0.00000000e+00]
Column  SD:
[1. 1.]
from sklearn.preprocessing import StandardScaler
df1 = StandardScaler().fit_transform(df)

会成功的。