一、Pandas归一化操作实现
在Pandas中我们可以使用sklearn模块中的MinMaxScaler类进行归一化。其具体步骤如下:
1.导入Pandas模块和sklearn模块。其中sklearn.preprocessing模块中提供了MinMaxScaler类用于归一化操作。
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
2.准备好需要进行归一化操作的数据。在此我们使用由6个学生成绩组成的数据集,其中每个学生的成绩包含了语文,数学,英语及物理4个科目的成绩。
df = pd.DataFrame({
'语文': [88, 96, 82, 80, 78, 75],
'数学': [100, 98, 85, 65, 92, 70],
'英语': [65,68,78,70,65,75],
'物理': [98,96,92,88,75,70],
})
3.使用MinMaxScaler类进行归一化操作。
minMax = MinMaxScaler()
df_scale = minMax.fit_transform(df)
df_scale = pd.DataFrame(df_scale)
df_scale.columns = ['语文', '数学', '英语', '物理']
其中,minMax.fit_transform()函数可以实现MinMaxScaler类的定义及归一化操作,而pd.DataFrame()函数则将归一化后的数据集转换成Pandas的DataFrame格式。df_scale.columns则重新定义了Pandas格式数据中的列名。
二、Pandas反归一化操作实现
在某些场景中,我们需要将归一化后的数据还原成原始数据。Pandas中也提供了可以实现反归一化操作的函数。其具体步骤如下:
1.导入Pandas模块和sklearn模块。其中sklearn.preprocessing模块中提供了MinMaxScaler类用于归一化操作。
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
2.准备好需要进行反归一化操作的数据。其中我们使用前述例子中得到的归一化后的数据集进行反归一化操作。
df_scale = pd.DataFrame({
'语文': [0.74358974, 1., 0.20512821, 0.1025641, 0., 0.28205128],
'数学': [1., 0.95081967, 0.28205128, 0., 0.75409836, 0.12820513],
'英语': [0., 0.20512821, 0.61538462, 0.30769231, 0., 0.43589744],
'物理': [0.97560976, 0.92682927, 0.75609756, 0.53658537, 0.2195122, 0.12820513],
})
3.使用MinMaxScaler类进行反归一化操作。
minMax = MinMaxScaler()
minMax.fit(df)
df_scaler = minMax.inverse_transform(df_scale)
df_scaler = pd.DataFrame(df_scaler)
df_scaler.columns = ['语文', '数学', '英语', '物理']
其中,minMax.inverse_transform()函数可以实现反归一化操作,将归一化后的数据还原成原始数据。而pd.DataFrame()函数则将反归一化后的数据集转换成Pandas的DataFrame格式。df_scaler.columns则重新定义了Pandas格式数据中的列名。
示例1:
以下是使用Pandas归一化与反归一化操作实现的代码。其中我们使用随机生成的学生成绩进行演示。
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
# 生成随机的DataFrame数据
df = pd.DataFrame({
'语文': [68, 99, 85, 94, 74],
'数学': [87, 95, 91, 74, 76],
'英语': [65, 68, 78, 70, 65],
'物理': [93, 78, 76, 84, 90],
})
# 进行归一化操作
minMax = MinMaxScaler()
df_scale = minMax.fit_transform(df)
df_scale = pd.DataFrame(df_scale)
df_scale.columns = ['语文', '数学', '英语', '物理']
# 进行反归一化操作
df_scaler = minMax.inverse_transform(df_scale)
df_scaler = pd.DataFrame(df_scaler)
df_scaler.columns = ['语文', '数学', '英语', '物理']
# 打印结果
print("原始成绩:")
print(df)
print("\n归一化后的成绩:")
print(df_scale)
print("\n反归一化后的成绩:")
print(df_scaler)
执行结果:
原始成绩:
语文 数学 英语 物理
0 68 87 65 93
1 99 95 68 78
2 85 91 78 76
3 94 74 70 84
4 74 76 65 90
归一化后的成绩:
语文 数学 英语 物理
0 0.058824 0.796610 0.000000 0.941176
1 1.000000 1.000000 0.153846 0.000000
2 0.558824 0.864407 1.000000 0.029412
3 0.911765 0.000000 0.384615 0.470588
4 0.000000 0.050847 0.000000 1.000000
反归一化后的成绩:
语文 数学 英语 物理
0 68.0 87.0 65.0 93.0
1 99.0 95.0 68.0 78.0
2 85.0 91.0 78.0 76.0
3 94.0 74.0 70.0 84.0
4 74.0 76.0 65.0 90.0
示例2:
以下是使用Pandas归一化与反归一化操作实现的代码。其中我们使用一个具有较大数据范围的数据集进行演示。
import pandas as pd
from sklearn.preprocessing import MinMaxScaler
# 生成随机的DataFrame数据
df = pd.DataFrame({
'语文': [97, 76, 89, 55, 48],
'数学': [86, 68, 91, 42, 76],
'英语': [45, 76, 31, 92, 60],
'物理': [94, 98, 64, 90, 73],
})
# 进行归一化操作
minMax = MinMaxScaler()
df_scale = minMax.fit_transform(df)
df_scale = pd.DataFrame(df_scale)
df_scale.columns = ['语文', '数学', '英语', '物理']
# 进行反归一化操作
df_scaler = minMax.inverse_transform(df_scale)
df_scaler = pd.DataFrame(df_scaler)
df_scaler.columns = ['语文', '数学', '英语', '物理']
# 打印结果
print("原始成绩:")
print(df)
print("\n归一化后的成绩:")
print(df_scale)
print("\n反归一化后的成绩:")
print(df_scaler)
执行结果:
原始成绩:
语文 数学 英语 物理
0 97 86 45 94
1 76 68 76 98
2 89 91 31 64
3 55 42 92 90
4 48 76 60 73
归一化后的成绩:
语文 数学 英语 物理
0 1.000000 0.888889 0.414634 0.962963
1 0.482759 0.586207 0.902439 1.000000
2 0.827586 1.000000 0.121951 0.111111
3 0.172414 0.000000 1.000000 0.888889
4 0.103448 0.586207 0.560976 0.555556
反归一化后的成绩:
语文 数学 英语 物理
0 97.0 86.0 45.0 94.0
1 76.0 68.0 76.0 98.0
2 89.0 91.0 31.0 64.0
3 55.0 42.0 92.0 90.0
4 48.0 76.0 60.0 73.0
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pandas归一化与反归一化操作实现 - Python技术站