类别变量:性别 | dtype:对象 | 值:男,男,男,男,女,女,女,男 |
我想将所有值分别替换为“男性”和“女性”。替换不起作用,表明“男性”和“女性”不存在。我可以将它们替换为1和0,但我不想将其设置为序数变量
这是我的代码:-
bck = pd.read_csv('BCK.csv')
bck['Gender'].value_counts()
bck.Gender.dtype
bck['Gender'] = bck['Gender'].astype('str')
bck.Gender.dtype
bck.Gender.replace(to_replace=dict(m = Male, f = Female, male = Male, female = Female, M = Male, F = Female), inplace=True)
这不起作用,并显示“男性不存在”。
答案 0 :(得分:3)
尝试:
df['Gender'].str[0].str.upper().map({'M':'Male', 'F':'Female'})
这将两个Series.str
访问器方法和Series.map
链接到:
通过在Gender
处建立索引来返回每个[0]
值的第一个字符
例如。 'male'[0] = m
和'Female'[0] = 'F'
str.upper()
将所有这些值都大写
最后,.map
将“ M”映射为“男性”,将“ F”映射为“女性”
答案 1 :(得分:0)
您的字典不正确。您还可以将它们作为变量,应该说name 'Male' is not defined
,而不是它们不存在。它们必须是字符串。
尝试:
bck.Gender.replace({'m':'Male', 'f':'Female', 'male':'Male','female':'Female', 'M':'Male', 'F':'Female'}), inplace=True)
或可以使用.map
函数:
x = {'m':'Male', 'f':'Female', 'male':'Male','female':'Female', 'M':'Male', 'F':'Female'}
bck['Gender'] = bck['Gender'].map(x)