如何编写返回预处理后DataFrame的函数,实现y去均值、x维度标准化
问题分析
你当前的代码不生效主要有以下几个原因:
- 遍历DataFrame列的元素时,你拿到的
i、j都是数值副本,修改这类临时变量不会作用到原DataFrame上 - 对x列做标准化的代码中,用到了未定义的变量
num_list,无法正确计算列标准差 - 最终没有筛选指定的x、y列,会返回原DataFrame的全部列
- 直接修改传入的DataFrame会改动原始数据,不符合函数封装的安全逻辑
修正后的代码
import pandas as pd def preprocess_for_regularization(data, y_column_name, x_column_names): # 先创建数据副本,避免修改原始DataFrame processed = data.copy() # 1. y列去均值 y_mean = processed[y_column_name].mean() processed[y_column_name] = processed[y_column_name] - y_mean # 2. 所有x列标准化(减均值除以标准差,ddof=0即总体标准差) for col in x_column_names: col_mean = processed[col].mean() col_std = processed[col].std(ddof=0) processed[col] = (processed[col] - col_mean) / col_std # 仅返回指定的y、x列 return processed[[y_column_name] + x_column_names] # 调用示例 data = pd.read_csv(tr_path).head() prepro_data = preprocess_for_regularization(data,'SalePrice', ['GrLivArea','YearBuilt']) print(prepro_data)
代码说明
- 用pandas内置的向量化运算替代逐元素遍历,执行效率更高,也避免了副本修改不生效的问题
- 所有操作都在数据副本上执行,不会污染传入的原始数据
- 最终返回结果仅保留指定的y列和x列,符合需求要求
内容的提问来源于stack exchange,提问作者laurene
相关产品推荐
相关产品推荐

