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

如何在自定义预处理函数中为DataFrame添加名称后缀?

实现方案

你需要的功能本质是在特征缩放后,通过命名规则区分不同处理状态的DataFrame,原参考代码存在语法错误,无法通过df+str("_mas")的形式动态生成变量名,以下是可直接运行的稳妥实现:

import pandas as pd
from sklearn.preprocessing import MaxAbsScaler, StandardScaler, MinMaxScaler, RobustScaler

def scale_df(df, scaler, custom_suffix=None):
    """
    特征缩放处理函数,保留原始DataFrame的索引与列名
    参数说明:
        df: 待处理的原始pandas DataFrame
        scaler: 已实例化的sklearn特征缩放器对象
        custom_suffix: 自定义后缀,不传则自动匹配缩放器生成对应标识后缀
    返回:
        缩放后的DataFrame,对应的后缀字符串
    """
    # 自动匹配缩放器生成后缀
    if custom_suffix is None:
        scaler_cls_name = type(scaler).__name__
        suffix_mapping = {
            "MaxAbsScaler": "mas",
            "StandardScaler": "ss",
            "MinMaxScaler": "mms",
            "RobustScaler": "rs"
        }
        suffix = suffix_mapping.get(scaler_cls_name, scaler_cls_name.lower())
    else:
        suffix = custom_suffix.strip("_")
    
    # 执行缩放,保留原始表结构
    scaled_data = scaler.fit_transform(df)
    scaled_df = pd.DataFrame(scaled_data, index=df.index, columns=df.columns)
    
    return scaled_df, f"_{suffix}"

使用示例

  • 对应原本的MaxAbsScaler场景
# 示例原始DataFrame
df = pd.DataFrame({"feature1": [1, 3, 5, 7], "feature2": [2, 4, 6, 8]})

# MaxAbs缩放处理
mas = MaxAbsScaler()
df_mas, _ = scale_df(df, mas)
# 变量名df_mas自带_mas后缀,和原始df明确区分
  • 批量生成多版本缩放数据集
    如果需要同时对比多种缩放技术的效果,推荐用字典统一管理所有版本的数据集,避免零散变量难维护:
# 数据集容器,key为数据集标识,value为对应DataFrame
data_pool = {"raw": df}

# 配置需要用到的缩放器和对应后缀
scaler_list = [
    (MaxAbsScaler(), "mas"),
    (StandardScaler(), "ss"),
    (MinMaxScaler(), "mms")
]

for scaler, suf in scaler_list:
    scaled_df, _ = scale_df(data_pool["raw"], scaler, suf)
    data_pool[f"raw_{suf}"] = scaled_df

# 调用时直接按key取值即可,比如data_pool["raw_mas"]就是MaxAbs缩放后的数据集

注意:不要为了省事实现在函数内部动态注入全局变量,这类写法会破坏代码作用域规则,极易出现变量覆盖、调试困难的问题,显式返回结果+容器统一管理是通用的稳妥实现方式。

内容的提问来源于stack exchange,提问作者ElMeTeOr

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 14:54:22