如何将DataFrame中air_temp属性归一化至[-1,1]?解决报错问题
DataFrame单特征归一化的正确实现方案
错误原因解析
- Reshape错误:sklearn的预处理函数要求输入为二维数组,但
elnino_1["air_temp"]返回的是一维Series,维度不匹配导致报错。 - int不可调用错误:你大概率把
scale或preprocessing这类库函数名当成了变量名(比如曾赋值scale = 10),后续调用函数时实际调用的是整数变量,因此触发该错误。
正确实现代码
注意前提
确保没有用库函数名作为变量名(比如不要定义scale = 0、preprocessing = 5这类代码)。
方法1:Z-score标准化(使用scale函数)
from sklearn.preprocessing import scale # 方式1:将Series转为二维数组(推荐) air_temp_scaled = scale(elnino_1["air_temp"].values.reshape(-1, 1)) # 方式2:用双括号提取DataFrame(自动为二维) air_temp_scaled = scale(elnino_1[["air_temp"]]) # 将标准化结果放回原DataFrame(需转成一维) elnino_1["air_temp_scaled"] = air_temp_scaled.flatten()
方法2:Z-score标准化(使用StandardScaler,适合模型复用)
from sklearn.preprocessing import StandardScaler scaler = StandardScaler() # 直接传入二维DataFrame,结果转一维后放回原表 elnino_1["air_temp_scaled"] = scaler.fit_transform(elnino_1[["air_temp"]]).flatten()
方法3:Min-Max归一化(缩放到[0,1]区间)
from sklearn.preprocessing import MinMaxScaler scaler = MinMaxScaler() elnino_1["air_temp_minmax"] = scaler.fit_transform(elnino_1[["air_temp"]]).flatten()
额外注意事项
- 若
air_temp存在缺失值,需先处理(如填充均值/中位数),否则sklearn预处理函数会报错:elnino_1["air_temp"].fillna(elnino_1["air_temp"].mean(), inplace=True)
内容的提问来源于stack exchange,提问作者OnlyForFun
相关产品推荐
相关产品推荐

