在pandas DataFrame中替换列值
我正在尝试替换一个数据表中某一列的值。这一列('female')只包含'female'和'male'这两个值。
我试过以下方法:
w['female']['female']='1'
w['female']['male']='0'
但是得到的结果和之前的一模一样。
我希望能得到一些输出,像下面这个循环那样逐个元素处理。
if w['female'] =='female':
w['female'] = '1';
else:
w['female'] = '0';
我查看了相关的文档(http://pandas.pydata.org/pandas-docs/stable/gotchas.html),但还是搞不清楚为什么什么都没有发生。
任何帮助都会很感激。
16 个回答
26
这个方法也应该可以用:
w.female[w.female == 'female'] = 1
w.female[w.female == 'male'] = 0
56
稍微有点不同:
w.female.replace(['male', 'female'], [1, 0], inplace=True)
68
w.female.replace(to_replace=dict(female=1, male=0), inplace=True)
150
你可以通过使用 loc 来编辑数据框中的一部分内容:
df.loc[<row selection>, <column selection>]
在这个例子中:
w.loc[w.female != 'female', 'female'] = 0
w.loc[w.female == 'female', 'female'] = 1
364
如果我理解得没错,你想要的东西大概是这样的:
w['female'] = w['female'].map({'female': 1, 'male': 0})
(在这里,我把值转换成数字,而不是包含数字的字符串。如果你真的想把它们转换成 "1"
和 "0"
,也可以,但我不太明白你为什么想那样做。)
你的代码之所以不工作,是因为在列上使用 ['female']
(你在 w['female']['female']
中的第二个 'female'
)并不是说“选择值为 'female' 的行”。而是说选择那些索引为 'female' 的行,而在你的数据框中可能根本没有这样的索引。