编写支持min_max/z_score归一化的Python函数报错如何解决?
问题排查与修正
1. 你当前遇到的SyntaxError报错直接原因
你定义zscore列的代码里,字符串结束引号用了中文全角的”,不是英文半角的",Python无法识别到字符串的闭合边界,因此抛出EOL扫描字符串字面量的语法错误,把df["zscore”]改成df["zscore"]即可解决该报错。
2. 代码中其他需要修正的错误
除了引号问题,你的代码还有多处逻辑、语法错误需要调整:
scaler.fit.transform是错误写法,MinMaxScaler的拟合转换方法是fit_transform,中间为下划线- z-score的计算逻辑完全错误:你当前的写法是对参数attr(应该是列的索引数字)求均值、标准差,再用这个值去找列,完全不符合逻辑。正确写法是先选中目标列,再对该列整体求均值和标准差
- 两处
dict(zip(...))的语句末尾都缺少闭合的右括号 - 函数内部的代码没有做缩进,不符合Python语法要求
- 不需要同时计算两种归一化结果,按需计算即可减少不必要的性能开销
3. 修正后的完整代码
import pandas as pd from sklearn.preprocessing import MinMaxScaler def normalization(fname, attr, normType): result = {} df = pd.read_csv(fname) # 获取目标列 target_col = df.columns[attr] targ = df[target_col].tolist() if normType == "min_max": scaler = MinMaxScaler() norm_vals = scaler.fit_transform(df[[target_col]]).flatten().tolist() result = dict(zip(targ, norm_vals)) elif normType == "z_score": col_mean = df[target_col].mean() col_std = df[target_col].std(ddof=1) norm_vals = ((df[target_col] - col_mean) / col_std).tolist() result = dict(zip(targ, norm_vals)) else: raise ValueError("归一化类型仅支持'min_max'或'z_score'") return result
内容的提问来源于stack exchange,提问作者Will Pratt
相关产品推荐
相关产品推荐

