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

Pandas多列元素映射打标及原地修改实现问题咨询

问题排查
  • 变量名错误:读取csv生成的变量是df,但筛选列时用了data.columns,运行会直接抛出NameError
  • 自定义函数无返回值:get_label中调用ser.map后没有返回处理后的Series,apply最终拿到的结果全是None
  • 未对原DataFrame赋值:df[columns].apply()会返回全新的DataFrame对象,没有赋值回原对象的话完全不会修改原df的数据
正确实现方案

方案1:基于原有逻辑修正

保留你原本的apply+map写法,仅修复存在的问题:

import pandas as pd

df = pd.read_csv('data/extrusion.csv')
# 修正变量名错误,用df.columns而非data.columns
columns = [c  for c in df.columns if 'SDickeIst'.lower() in c.lower()]

# 定义基于值返回对应分类的函数,补充返回值
def get_label(ser):
    return ser.map(lambda x : x if x == 0 else 1)

# 将处理后的结果赋值回原列,实现修改
df[columns] = df[columns].apply(get_label)

方案2:更高效的向量化实现

推荐使用该方案,Pandas底层直接做批量运算,性能比逐元素遍历的map/apply高1~2个数量级,适合数据量较大的场景

import pandas as pd

df = pd.read_csv('data/extrusion.csv')
columns = [c  for c in df.columns if 'SDickeIst'.lower() in c.lower()]

# where逻辑:满足==0的条件保留原值,不满足的统一替换为1,完全匹配需求
df[columns] = df[columns].where(df[columns] == 0, 1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:15:08