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]
。 请参阅此答案以获取更多信息。