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

Python如何修改DataFrame某一列的值而不影响其他列的内容?

错误原因

你遇到这个问题的核心原因是使用了链式索引(renombrada.SEXO.loc[...]这种写法),这是pandas中明确不推荐的操作方式:
链式索引操作时,pandas无法保证返回的是原DataFrame的视图还是副本,修改操作的作用范围会出现不可预期的行为,你遇到的全表1被替换就是典型的副作用,大多数情况下该操作还会触发SettingWithCopyWarning警告。

修正方案1:调整loc用法,避免链式索引

loc本身支持同时指定行条件和列名,直接在原DataFrame上做定位修改,不会出现范围溢出:

# 替换SEXO列的值
renombrada.loc[renombrada.SEXO == 1, 'SEXO'] = "Varón"
renombrada.loc[renombrada.SEXO == 2, 'SEXO'] = "Mujer"

# 替换NIVEL_EDUCATIVO列的值
renombrada.loc[renombrada.NIVEL_EDUCATIVO == 1, 'NIVEL_EDUCATIVO'] = "Primario incompleto"
renombrada.loc[renombrada.NIVEL_EDUCATIVO == 2, 'NIVEL_EDUCATIVO'] = "Primario completo"
renombrada.loc[renombrada.NIVEL_EDUCATIVO == 3, 'NIVEL_EDUCATIVO'] = "Secundario incompleto"

修正方案2:使用replace批量映射(更推荐)

对于固定数值到文本的映射场景,直接给对应列传入映射字典即可,不需要逐行判断,代码更简洁高效:

# 定义各列的映射规则
sexo_map = {1: "Varón", 2: "Mujer"}
educacion_map = {
    1: "Primario incompleto",
    2: "Primario completo",
    3: "Secundario incompleto"
}

# 批量替换
renombrada['SEXO'] = renombrada['SEXO'].replace(sexo_map)
renombrada['NIVEL_EDUCATIVO'] = renombrada['NIVEL_EDUCATIVO'].replace(educacion_map)

如果不需要保留映射规则外的原值,也可以将replace方法替换为map方法,用法完全一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:27:00