Python代码中缩进语法正确的else语句为何报无效语法错误
问题根因
你遇到的syntax error invalid syntax else报错并不是else本身写法有问题,而是if分支内的代码行缺少闭合的右括号,Python解析器无法识别if块的结束边界,才会误报else语法非法。
具体错误修正点
- 原代码if分支内的赋值行:
dict(zip(targ, df.minmax.values.tolist())末尾缺少1个右括号,修正为dict(zip(targ, df.minmax.values.tolist())) - 原代码else分支内的赋值行:
dict(zip(targ, df.zscore.values.tolist())末尾缺少1个右括号,修正为dict(zip(targ, df.zscore.values.tolist())) - 额外存在的其他语法/逻辑错误:
- MinMaxScaler的方法调用错误:
scaler.fit.transform应该是scaler.fit_transform,中间是下划线不是点 - zscore计算的索引逻辑错误:原代码把
mean()、std()方法写到了attr变量后面,而不是目标列的Series对象后面,需要先提取目标列再做统计计算
- MinMaxScaler的方法调用错误:
修正后完整代码
import pandas as pd from sklearn.preprocessing import MinMaxScaler def normalization(fname, attr, normType): result = {} df = pd.read_csv(fname) target_col = df[df.columns[attr]] targ = target_col.tolist() scaler = MinMaxScaler() df["minmax"] = scaler.fit_transform(df[[df.columns[attr]]]) df["zscore"] = (target_col - target_col.mean()) / target_col.std(ddof=1) if normType == "min_max": result = dict(zip(targ, df.minmax.values.tolist())) else: result = dict(zip(targ, df.zscore.values.tolist())) return result
内容的提问来源于stack exchange,提问作者Will Pratt
相关产品推荐
相关产品推荐

