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

自定义preprocessing函数报无StandardScaler属性错误如何解决

问题原因

代码共存在两处核心问题,其中一处直接触发当前报错,另一处是修复首个问题后会触发的隐藏bug:

  • 命名冲突:你自定义的函数名是preprocessing,函数内部写preprocessing.StandardScaler()时,Python会优先匹配当前作用域下你自定义的这个函数对象,不会指向sklearn的preprocessing模块,函数对象不存在StandardScaler属性,因此抛出AttributeError。
  • 方法名拼写错误:代码中写的fit_transfrom为错误拼写,缩放器对应的正确方法名是fit_transform。
  • 额外问题:原代码缺失sklearn相关依赖的导入语句。
修复方法

最稳妥的方案是直接导入需要的缩放器类,从根源避开模块名和自定义函数重名的冲突,同时修正拼写错误、补全导入语句,修复后完整代码如下:

# 补全依赖导入
import pandas as pd
from sklearn.preprocessing import StandardScaler

# 直接导入类即可完全避开命名冲突,也可以把函数名改成其他名字比如df_preprocessing进一步降低冲突风险
def preprocessing(df:pd.DataFrame,scaler:str):
  not_uv=[]
  for column in df.columns:
    if column != 'uv': # uv为目标列,不做标准化
      not_uv.append(column)
  if scaler == 'standard':
    standard_scaler = StandardScaler()
    # 修正fit_transform的拼写错误
    standard_df = pd.DataFrame(standard_scaler.fit_transform(df[not_uv]), columns = not_uv)
    standard_df = pd.concat([standard_df,df[['uv']]],axis=1)
    return standard_df

修复后原有调用逻辑可以正常运行:

preprocessing(df_13,'standard')

如果你更习惯通过模块路径调用类,也可以在导入时给sklearn的preprocessing模块起别名,避免和自定义函数重名,示例导入写法:

from sklearn import preprocessing as sk_prep
# 实例化缩放器时写sk_prep.StandardScaler()即可

内容的提问来源于stack exchange,提问作者형한결

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 18:24:45