Python中如何将pandas数据用sklearn进行归一化处理?
我用如下的语句:
print( train_values )
scaler_value = sklearn.preprocessing.StandardScaler()
train_values = train_values.reshape( -1, 1 )
train_values = scaler_value.fit_transform( train_values )
print( train_values )
在没归一化之前,第一个 print()的显示结果为:
0 3.611735
1 3.061345
2 1.336066
3 4.472938
4 0.950000
5 1.005221
6 -1.695007
7 -1.863722
8 9.722779
9 -1.898245
10 -2.265924
11 -2.251220
12 -0.926588
13 0.601857
14 -2.401116
15 2.804064
16 0.063416
17 -2.446691
18 -2.990583
19 -1.146860
20 0.988730
21 0.401565
22 -0.364725
23 4.671857
24 1.135132
25 -0.300000
26 5.003030
27 -1.209091
28 3.397024
29 2.683139
59584 0.561141
59585 0.425851
59586 2.551711
59587 0.770950
59588 1.429819
59589 -0.038630
59590 -0.160140
59591 -2.024138
59592 0.987554
59593 2.120701
59594 2.076600
59595 0.173934
59596 0.547458
59597 0.775269
59598 0.871875
59599 0.215169
59600 0.069213
59601 -0.184726
59602 1.211879
59603 -1.038636
59604 1.261280
59605 1.851639
59606 0.537404
59607 2.216779
59608 -0.226362
59609 4.037632
59610 -2.224026
59611 -10.302545
59612 -1.040319
59613 -3.158932
Name: RealValues, Length: 59614, dtype: float64
归一化之后,第二个 print()的显示结果为:
[[ 0.67192266]
[ 0.57905474]
[ 0.28794649]
…
[-1.67584932]
[-0.1130236 ]
[-0.47049954]]
我应该怎样才能把归一化后的数据结构变回原来的样式?
Python中如何将pandas数据用sklearn进行归一化处理?
import pandas as pd
from sklearn.preprocessing import MinMaxScaler, StandardScaler
import numpy as np
# 创建示例数据
df = pd.DataFrame({
'A': np.random.randn(100) * 10 + 50,
'B': np.random.randn(100) * 5 + 20,
'C': np.random.randn(100) * 2 + 10
})
# 方法1:MinMax归一化(缩放到[0,1]区间)
scaler_minmax = MinMaxScaler()
df_minmax = pd.DataFrame(
scaler_minmax.fit_transform(df),
columns=df.columns,
index=df.index
)
# 方法2:Z-score标准化(均值0,方差1)
scaler_standard = StandardScaler()
df_standard = pd.DataFrame(
scaler_standard.fit_transform(df),
columns=df.columns,
index=df.index
)
# 方法3:只归一化特定列
scaler_partial = MinMaxScaler()
df['A_normalized'] = scaler_partial.fit_transform(df[['A']])
# 方法4:保留归一化器以便后续使用
scaler = StandardScaler()
scaler.fit(df[['A', 'B']]) # 只在训练集上fit
df[['A_scaled', 'B_scaled']] = scaler.transform(df[['A', 'B']])
# 查看结果
print("原始数据统计:")
print(df[['A', 'B', 'C']].describe())
print("\nMinMax归一化后统计:")
print(df_minmax.describe())
print("\nZ-score标准化后统计:")
print(df_standard.describe())
核心要点:
- MinMaxScaler:将数据缩放到[0,1]区间,公式:(x - min)/(max - min)
- StandardScaler:Z-score标准化,使数据均值为0、方差为1
- fit_transform:先拟合数据(计算min/max或mean/std),然后转换
- 保持数据结构:转换后用pd.DataFrame()保持列名和索引
- 注意:测试集要用训练集的scaler,只调用transform(),不要重新fit
关键就一句话:用sklearn的预处理工具,fit_transform训练集,transform测试集。
谢谢 ,OK!
scaler_value = sklearn.preprocessing.StandardScaler()
train_values = train_values.reshape( -1, 1 )
train_values = scaler_value.fit_transform( train_values )
train_values = train_values.reshape( 1, -1 )
train_values = pandas.DataFrame( train_values[0,:] )

