我想规范以下数据框中的列:

import pandas as pd
from pprint import pprint
d = {'A': [1,0,3,0], 'B':[2,0,1,0], 'C':[0,0,8,0], 'D':[1,0,0,1]}
df = pd.DataFrame(data=d)
df = (df - df.mean())/df.std()


我不确定标准化是按行还是按列进行。

我打算对每列执行(x - mean of elements in the column)/ standard deviation

是否需要将标准差除以每列中的条目数?

最佳答案

您的代码按列运行,并且可以正常运行。但是,如果这是您的问题,那么还有其他类型的规范化,这可能是您需要的:

平均归一化(就像您所做的那样):

normalized_df=(df-df.mean())/df.std()
          A         B    C         D
0  0.000000  1.305582 -0.5  0.866025
1 -0.707107 -0.783349 -0.5 -0.866025
2  1.414214  0.261116  1.5 -0.866025
3 -0.707107 -0.783349 -0.5  0.866025


最小-最大归一化:

normalized_df=(df-df.min())/(df.max()-df.min())
          A    B    C    D
0  0.333333  1.0  0.0  1.0
1  0.000000  0.0  0.0  0.0
2  1.000000  0.5  1.0  0.0
3  0.000000  0.0  0.0  1.0


使用sklearn.preprocessin,您可以找到许多(不仅是)标准化方法,例如StandardScalerMinMaxScalerMaxAbsScaler

使用sklearn的均值归一化:
    将熊猫作为pd导入
    从sklearn导入预处理

mean_scaler = preprocessing.StandardScaler(copy=True, with_mean=True, with_std=True)
x_scaled = mean_scaler.fit_transform(df.values)
normalized_df = pd.DataFrame(x_scaled)

          0         1         2    3
0  0.000000  1.507557 -0.577350  1.0
1 -0.816497 -0.904534 -0.577350 -1.0
2  1.632993  0.301511  1.732051 -1.0
3 -0.816497 -0.904534 -0.577350  1.0


使用sklearn MinMaxScaler的最小-最大归一化:

import pandas as pd
from sklearn import preprocessing

min_max_scaler = preprocessing.MinMaxScaler()
x_scaled = min_max_scaler.fit_transform(df.values)
normalized_df = pd.DataFrame(x_scaled)

          0    1    2    3
0  0.333333  1.0  0.0  1.0
1  0.000000  0.0  0.0  0.0
2  1.000000  0.5  1.0  0.0
3  0.000000  0.0  0.0  1.0


希望对您有帮助!

关于python - 标准化数据框的列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57987532/

10-14 19:02