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进行归一化处理?


2 回复
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())

核心要点:

  1. MinMaxScaler:将数据缩放到[0,1]区间,公式:(x - min)/(max - min)
  2. StandardScaler:Z-score标准化,使数据均值为0、方差为1
  3. fit_transform:先拟合数据(计算min/max或mean/std),然后转换
  4. 保持数据结构:转换后用pd.DataFrame()保持列名和索引
  5. 注意:测试集要用训练集的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,:] )

回到顶部