在熊猫数据框中将``否''和``是''转换为0和1

时间:2018-08-03 12:31:06

标签: python pandas

我想转换“ edjefe”列的数据,该列包含int以及“ yes”和“ no”值。我的问题是我只想将“是”和“否”映射到1和0,并保持int值不变 所以我写了这段代码

def foo(x):
if x == 'no':
    return 0
elif x == 'yes':
    return 1
else:
    return x

df1.edjefe.map(lambda x : foo(x))

但是我遇到了一个错误,

RecursionError: maximum recursion depth exceeded while calling a Python object

5 个答案:

答案 0 :(得分:7)

您也可以只使用replace

df.edjefe.replace(to_replace=['no', 'yes'], value=[0, 1])

答案 1 :(得分:3)

您可以将pd.Series.map与字典映射一起使用,然后再跟pd.Series.fillna

d = {'no': 0, 'yes': 1}
df1['edjefe'] = df1['edjefe'].map(d).fillna(df1['edjefe'])

您可能会发现它比pd.Series.replace更有效。

有关更多详细信息,请参见Replace values in a pandas series via dictionary efficiently

如果您的系列中有可变对象,这将失败,因为字典键必须是可哈希的。在这种情况下,您可以转换为字符串:

df1['edjefe'] = df1['edjefe'].astype(str).map(d).fillna(df1['edjefe'])

答案 2 :(得分:0)

只需使用类似dict的to_replace

df['edjefe'].replace({'no': 0, 'yes': 1})

答案 3 :(得分:0)

您也可以尝试:

df1['edjefe'] = (df1['edjefe']=="yes")*1 

答案 4 :(得分:0)

您也可以使用pandas.Categorical。

df1["edjefe"] = pd.Categorical(df1["edjefe"]).codes

访问here了解更多信息。