You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写返回预处理后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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:45:04