问题描述与分析
报错:“A value is trying to be set on a copy of a slice from a DataFrame”
# data是某个DataFrame# 创建一个判断条件
cond = (data['workclass'] == '?')# 想根据判断条件,修改DataFrame中的某些值
data['workclass'][cond] = 'unknown'
这个错误意味着你正在尝试修改一个来自DataFrame切片的副本,而非直接修改原始DataFrame。在Pandas中,某些操作会返回DataFrame的一个视图(view)而非副本(copy),直接修改这个视图有时会导致上述错误。
解决方案
推荐的做法是使用.loc
或.iloc
访问器来确保您是在操作原始DataFrame上的数据,而不是其副本。
# 判断条件
cond = data['workclass'] == '?'# 这样写可以解决错误
data.loc[cond, 'workclass'] = 'unknown'
.loc
或.iloc
根据标签(布尔条件或索引)选择行和列后可以直接对选中的数据进行赋值。