规范化数据框的列
Normalizing the columns of a dataframe
我想规范化以下数据框中的列:
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
。
是否需要将标准差除以每列中的条目数?
您的公式是 运行 逐列的,结果如下。
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
您可以在 df 上使用以下代码仔细检查。
for col in df.columns:
df[col+'_mean']= df[col].mean()
df[col+'_std']= df[col].std()
这将给出如下输出,您可以使用它来验证您是否得到了所需的内容。
A B C D A_mean A_std B_mean B_std C_mean C_std D_mean D_std
0 1 2 0 1 1.0 1.414214 0.75 0.957427 2.0 4.0 0.5 0.57735
1 0 0 0 0 1.0 1.414214 0.75 0.957427 2.0 4.0 0.5 0.57735
2 3 1 8 0 1.0 1.414214 0.75 0.957427 2.0 4.0 0.5 0.57735
3 0 0 0 1 1.0 1.414214 0.75 0.957427 2.0 4.0 0.5 0.57735
您的代码是 运行 column-wise 并且它工作正常。但是,如果这是您的问题,还有其他类型的规范化,以下是您可能需要的一些:
均值归一化(就像你做的那样):
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 you find a lot of normalization methods (and not only) ready, such as StandardScaler, MinMaxScaler or MaxAbsScaler:
平均归一化 使用 sklearn:
import pandas as pd
from sklearn import preprocessing
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
希望对你有所帮助!
我想规范化以下数据框中的列:
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
。
是否需要将标准差除以每列中的条目数?
您的公式是 运行 逐列的,结果如下。
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
您可以在 df 上使用以下代码仔细检查。
for col in df.columns:
df[col+'_mean']= df[col].mean()
df[col+'_std']= df[col].std()
这将给出如下输出,您可以使用它来验证您是否得到了所需的内容。
A B C D A_mean A_std B_mean B_std C_mean C_std D_mean D_std
0 1 2 0 1 1.0 1.414214 0.75 0.957427 2.0 4.0 0.5 0.57735
1 0 0 0 0 1.0 1.414214 0.75 0.957427 2.0 4.0 0.5 0.57735
2 3 1 8 0 1.0 1.414214 0.75 0.957427 2.0 4.0 0.5 0.57735
3 0 0 0 1 1.0 1.414214 0.75 0.957427 2.0 4.0 0.5 0.57735
您的代码是 运行 column-wise 并且它工作正常。但是,如果这是您的问题,还有其他类型的规范化,以下是您可能需要的一些:
均值归一化(就像你做的那样):
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 you find a lot of normalization methods (and not only) ready, such as StandardScaler, MinMaxScaler or MaxAbsScaler:
平均归一化 使用 sklearn:
import pandas as pd
from sklearn import preprocessing
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
希望对你有所帮助!