替换熊猫数据框中的类别变量的值

时间:2018-12-20 10:05:57

标签: python pandas

类别变量:性别 | 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)

这不起作用,并显示“男性不存在”。

2 个答案:

答案 0 :(得分:3)

尝试:

df['Gender'].str[0].str.upper().map({'M':'Male', 'F':'Female'})

说明

这将两个Series.str访问器方法和Series.map链接到:

  1. 通过在Gender处建立索引来返回每个[0]值的第一个字符
    例如。 'male'[0] = m'Female'[0] = 'F'

  2. str.upper()将所有这些值都大写

  3. 最后,.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)