在pandas DataFrame中替换列值

224 投票
16 回答
785288 浏览
提问于 2025-04-18 04:20

我正在尝试替换一个数据表中某一列的值。这一列('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)

查看 pandas.DataFrame.replace() 的文档

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' 的行,而在你的数据框中可能根本没有这样的索引。

撰写回答