我想转换“ 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
答案 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)