pandas:replace数据框中的列值

我试图replace数据框的一列中的值。 列(“女性”)只包含“女性”和“男性”的值。

我已经尝试了以下内容:

w['female']['female']='1' w['female']['male']='0' 

但收到以前的结果完全相同的副本。

理想情况下,我希望得到一些类似下面的循环元素的输出。

 if w['female'] =='female': w['female'] = '1'; else: w['female'] = '0'; 

我已经浏览了gotchas文档( http://pandas.pydata.org/pandas-docs/stable/gotchas.html ),但不知道为什么没有发生。

任何帮助将不胜感激。

如果我理解正确,你想要这样的东西:

 w['female'] = w['female'].map({'female': 1, 'male': 0}) 

(在这里,我将这些值转换为数字,而不是包含数字的string,如果您真的想要,可以将它们转换为"1""0" ,但我不确定为什么要这样做。

你的代码不起作用的原因是因为在你的w['female']['female']的列上使用['female']并不意味着“select行的值是'女'”。 这意味着select索引为“女”的行,其中可能没有任何您的DataFrame中的任何。

您可以使用loc编辑数据框的子集:

 df.loc[<row selection>, <column selection>] 

在这种情况下:

 w.loc[w.female != 'female', 'female'] = 0 w.loc[w.female == 'female', 'female'] = 1 
 w.female.replace(to_replace=dict(female=1, male=0), inplace=True) 

请参阅pandas.DataFrame.replace()文档 。

轻微变化:

 w.female.replace(['male', 'female'], [1, 0], inplace=True) 

这也应该工作:

 w.female[w.female == 'female'] = 1 w.female[w.female == 'male'] = 0 

另外还有一些内置函数pd.get_dummies用于这些types的赋值:

 w['female'] = pd.get_dummies(w['female'],drop_first = True) 

这给你一个数据框有两列,每一个在w ['female']中出现的值,其中第一个(因为你可以从剩下的那个中推断出来)。 新列将自动命名为您replace的string。

如果您有具有两个以上可能值的分类variables,这一点尤其有用。 这个函数创build了所有需要区分所有情况的虚拟variables。 要小心,不要将整个数据框分配给一个单独的列,而是如果w ['female']可以是'男','女'或'中立',可以这样做:

 w = pd.concat([w, pd.get_dummies(w['female'], drop_first = True)], axis = 1]) w.drop('female', axis = 1, inplace = True) 

然后,你留下两个新的列给你虚拟编码的“女性”,你摆脱了与string的列。

pandas还有一个叫做factorize的函数,可以用来自动完成这种types的工作。 它将标签转换为数字: ['male', 'female', 'male'] -> [0, 1, 0] 。 请参阅此答案以获取更多信息。