Skip to main content
 首页 » 编程设计

python之Pandas Dataframe 将具有两个值的分类列重新映射为二进制

2025年05月04日15del

我有一个数据框进来,想检查“男性”或“女性”的字符串,如果数据框包含它们,它将被替换为“1”或“0”。由于@Anand S Kumar's answer,目前我正在使用下面的代码.

if dataframe['gender']: 
    dataframe['gender'].replace([0,1],['Female','Male'],inplace=True) 
if dataframe['sex']: 
    dataframe['sex'].replace([0,1],['Female','Male'],inplace=True) 

但是,我还想涵盖任何其他变体,例如“男性”、“M”和“m”或“女性”、“F”、“f”,并且宁愿避免再使用两个 if 语句对于每个变化。

我试过使用更大的列表,例如...

dataframe['gender'].replace([0,1,0,1,0,1,0,1],['Female','Male','male','female','M','F','m','f'],inplace=True) 

字典...

dataframe['gender'].replace({0:'Female',1:'Male', 0:'female',1:'male',0:'F',1:'M',0:'f',1:'m'},inplace=True) 

但是得到了“系列的真值不明确”。两者的 ValueError。

有没有人知道更好的方法,或者我目前的尝试做错了什么?

提前致谢!

编辑:我的 ValueError 是因为我的 if 语句含糊不清。我将其更改为 if 'gender' in dataframe.columns: 来修复它。找到修复 here .

请您参考如下方法:

本着诚意,假设您的列包含有效数据,为什么不根据每行的第一个字母进行替换?

m = {'m' : 1, 'f' : 0} 
df['gender'] = df['gender'].str[0].str.lower().map(m) 

使用 map,无效条目会自动强制转换为 NaN。