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

Pandas:替换值并新增列(保留原列)的实现及方案选择

关于DataFrame值替换与预处理的方案建议

嘿,作为Python新手能考虑到预处理的细节真的很赞!咱们来拆解你的问题:

一、建模前预处理:用新DF还是原DF新增列?

两种方案都有适用场景,没有绝对的对错,看你的需求:

  • 用新生成的df_train_scaled:最稳妥的选择,原始数据df_train完全保留,后续如果需要对比转换前后的效果、排查建模问题,随时可以回溯原始数据,不会造成数据污染。适合你只需要用转换后特征建模的场景。
  • 在原DF中新增列:适合需要同时保留原始特征和转换后特征的情况——比如你之后想分析原始字符串和转换后数值的关联,或者部分特征用转换后的值、部分用原始值来建模。

二、在原DataFrame中新增替换后值的列的方法

我给你举几个实用的代码例子,你可以直接套用:

1. 针对单一列的字符串替换(映射规则明确)

假设你要处理的是status列,把"pending"换成1,"completed"换成2,"failed"换成0:

# 定义替换映射字典
replace_rules = {"pending": 1, "completed": 2, "failed": 0}
# 新增名为status_processed的列
df_train["status_processed"] = df_train["status"].map(replace_rules)

如果遇到映射字典里没有的字符串,map会返回NaN,要是想保留原字符串或者设默认值,可以用map(lambda x: replace_rules.get(x, x))。

2. 用replace函数直接生成新列

和map效果类似,语法更灵活,支持单个值或字典替换:

df_train["status_processed"] = df_train["status"].replace({"pending": 1, "completed": 2, "failed": 0})

3. 批量处理多列生成对应新列

如果有多列需要用相同规则替换,可以用循环批量生成:

# 要处理的列名列表
target_cols = ["status", "level", "type"]
# 统一替换规则
replace_rules = {"low": 0, "mid": 1, "high": 2}

for col in target_cols:
    # 新列名在原列名后加_processed
    df_train[f"{col}_processed"] = df_train[col].map(replace_rules)

4. 结合 sklearn 预处理工具生成新列

如果是数值特征的缩放(比如标准化、归一化),也可以直接在原DF新增处理后的列:

from sklearn.preprocessing import MinMaxScaler

scaler = MinMaxScaler()
# 对age列做归一化,生成age_scaled列
df_train["age_scaled"] = scaler.fit_transform(df_train[["age"]])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 06:54:46