Pandas列缩放归一化:将TOTAL列映射至5-50生成SIZE列
解决MinMaxScaler的Reshape报错问题
你碰到的这个报错,核心原因是**MinMaxScaler要求输入的数据必须是二维数组**(也就是形状为(样本数, 特征数)的格式),但df["TOTAL"]返回的是一维的Pandas Series(形状是(样本数,)),不符合要求,所以需要先调整数据的维度。
这里给你两种可行的修正方案:
方案1:用reshape(-1, 1)转换维度
直接把一维的Series转换成n行1列的二维数组,代码如下:
from sklearn.preprocessing import MinMaxScaler import pandas as pd # 先构造你的DataFrame df = pd.DataFrame({ "TOTAL": [3232, 382, 8291], "Name": ["Jane", "Jack", "Jones"] }) scaler = MinMaxScaler(feature_range=(10, 50)) # 转换维度后再做缩放 df["SIZE"] = scaler.fit_transform(df["TOTAL"].values.reshape(-1, 1))
方案2:用双重方括号获取二维DataFrame
如果你不想手动reshape,可以用df[["TOTAL"]](注意是双重方括号),这样返回的是一个只有一列的DataFrame,本身就是二维结构,直接传入即可:
scaler = MinMaxScaler(feature_range=(10, 50)) df["SIZE"] = scaler.fit_transform(df[["TOTAL"]])
运行任意一种方案后,你都会得到和示例一致的结果:
| TOTAL | Name | SIZE |
|---|---|---|
| 3232 | Jane | 24.413... |
| 382 | Jack | 10.0 |
| 8291 | Jones | 50.0 |
内容的提问来源于stack exchange,提问作者machump




