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

使用Python Pandas修改UCI成人数据集'etiquette'列值失败求助

问题:如何修改UCI成人数据集'etiquette'列的取值?

我正在处理UCI成人数据集,已添加表头方便操作。需要修改名为'etiquette'的最后一列,该列仅包含'<=50K'和'>50K'两个取值。尝试了以下两种方法,但执行后无任何效果,运行print(num_datos.etiquette[0])仍输出'<=50K',请问如何有效修改该列的取值?

尝试过的方法

方法一

num_datos.loc[num_datos.loc[:,"etiquette"]=="<=50K", "etiquette"]=1 
num_datos.loc[num_datos.loc[:,"etiquette"]==">50K", "etiquette"]=0 

方法二

num_datos['etiquette'].replace(['<=50K'], 1)
num_datos['etiquette'].replace(['>50K'], 0)

解决方案

针对方法二的修正

replace方法默认不会直接修改原DataFrame,而是返回一个修改后的新对象。你需要加上inplace=True参数让修改生效,或者将结果重新赋值给原列:

方式1:使用inplace参数

num_datos['etiquette'].replace(['<=50K', '>50K'], [1, 0], inplace=True)

方式2:重新赋值

num_datos['etiquette'] = num_datos['etiquette'].replace({'<=50K': 1, '>50K': 0})

更简洁的替代方法

可以用map方法直接完成映射替换,代码更简洁高效:

num_datos['etiquette'] = num_datos['etiquette'].map({'<=50K': 1, '>50K': 0})

方法一无效的可能原因及修正

方法一无效大概率是因为你操作的是DataFrame的视图而非副本,导致赋值无法同步到原数据。可以先确保操作的是副本,或者简化写法:

# 先创建副本(如果原数据是视图的话)
num_datos = num_datos.copy()
# 再执行赋值
num_datos.loc[num_datos["etiquette"] == "<=50K", "etiquette"] = 1
num_datos.loc[num_datos["etiquette"] == ">50K", "etiquette"] = 0

执行上述任意一种修正方法后,再运行print(num_datos.etiquette[0])就能得到预期的数值1了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 16:00:50