如何对pandas DataFrame多列统一应用MinMaxScaler?
对Pandas DataFrame指定多列统一应用MinMaxScaler的实现方法
默认的MinMaxScaler会单独对每列数据进行缩放,要实现基于指定多列全部数据的统一缩放,核心是把这些列的数据合并成一维数据集,让缩放器基于全局的最小/最大值拟合,再将缩放结果拆分回原列结构。
具体步骤与代码示例
- 导入依赖库
import pandas as pd from sklearn.preprocessing import MinMaxScaler
- 准备数据并指定目标列
假设你的DataFrame名为df,需要缩放的12列可以通过列名列表或索引范围指定,比如:
# 示例:按列名指定要缩放的12列 scale_cols = ['col_a', 'col_b', 'col_c', ...] # 替换为你的实际列名 # 或者按索引范围选取(比如前12列) # scale_cols = df.columns[:12]
- 合并目标列数据并拟合缩放器
将目标列的数据摊平为一维数组,让缩放器基于全部数据计算全局的最小/最大值:
# 提取目标列数据并转为一维二维数组(MinMaxScaler要求输入为二维) data_to_scale = df[scale_cols].values.ravel().reshape(-1, 1) # 初始化并拟合缩放器 scaler = MinMaxScaler() scaler.fit(data_to_scale)
- 执行缩放并赋值回原DataFrame
将缩放后的一维数据重塑回原目标列的形状,替换原数据:
# 缩放数据并重塑结构 scaled_data = scaler.transform(data_to_scale).reshape(df[scale_cols].shape) # 赋值回原DataFrame df[scale_cols] = scaled_data
完整测试示例
import pandas as pd from sklearn.preprocessing import MinMaxScaler # 构造测试DataFrame(包含4列,其中3列需要统一缩放) df = pd.DataFrame({ 'col1': [1, 2, 3, 4, 5], 'col2': [10, 20, 30, 40, 50], 'col3': [100, 200, 300, 400, 500], 'col4': [0, 1, 0, 1, 0] # 无需缩放的列 }) # 指定需要统一缩放的列 scale_cols = ['col1', 'col2', 'col3'] # 合并数据并拟合缩放器 data_ravel = df[scale_cols].values.ravel().reshape(-1, 1) scaler = MinMaxScaler() scaled_data = scaler.fit_transform(data_ravel) # 赋值回原DataFrame df[scale_cols] = scaled_data.reshape(df[scale_cols].shape) print(df)
注意事项
- 如果目标列存在缺失值(
NaN),需要先通过df[scale_cols].fillna()等方式处理,否则MinMaxScaler会报错。 - 缩放后的数值范围默认是
[0,1],如果需要其他范围,可以在初始化时指定feature_range=(min_val, max_val),比如MinMaxScaler(feature_range=(-1,1))。
内容的提问来源于stack exchange,提问作者NavidReza Ghanbari
相关产品推荐
相关产品推荐

