无法用python中的replace命令替换值

时间:2017-10-04 14:08:47

标签: python pandas

您好我正在尝试创建一个名为“TitleGroup”的专栏,该专栏将有一组人员,这些专家将使用数字对相似的标题进行分组

traindf['Title'] = traindf['Name'].apply(lambda x: str(x).split(',')[1].split('.')[0])
traindf['TitleGroup'] = 0
traindf['TitleGroup'] = traindf['Title'].replace(['Mrs','Miss','Mme','Ms','Lady','Mlle','the Countess','Dona'], 'female', regex  = True)
traindf['TitleGroup'] = traindf['Title'].replace(['Sir','Don','Rev','Mr',],'male', regex = True)
#traindf['TitleGroup'] = traindf['Title'].replace(['Col','Dr','Col','Capt','Major','Jonkheer','Master'],'Special', regex = True)
#traindf['TitleGroup'] = traindf['Title'].map({'male':1, 'female':0, 'Special':2})
traindf.head()

enter image description here

1.该程序正在输出几个标题,但看第二行'太太'输出为'男性'? “太太”的标题应该用“女性”代替,但事实并非如此。

2.取消注释第5行,显示TitleGroup,其名称与Title相同。

3.将正则表达式设为False,输出与第二点相同的结果。

4.取消注释第6行导致TitleGroup全部为NaN

即使使用.loc说我也帮不了你

1 个答案:

答案 0 :(得分:0)

正如replace method的python文档中所提到的,该方法将:

  

返回字符串s的副本,其中出现所有子字符串old   取而代之的是新的。

因此,当您进行第一次替换(View)时,您不会更改traindf['Title'].replace(['Mrs','Miss','Mme','Ms','Lady','Mlle','the Countess','Dona'], 'female', regex = True)的内容,但会将结果放在traindf['Title']字段中。所以traindf['TitleGroup']中的每一位太太,小姐......仍然在那里。

然后,当您进行第二次替换时:traindf['Title'],仍有一些' Mrs'在traindf['Title'].replace(['Sir','Don','Rev','Mr',],'male', regex=True)和' Mrs'中,有' Mr' ^ _ ^,因此traindf['Title']方法会找到一些' Mr'替换为男性'以及您的' Mrs'将成为男性

如果您想避免此类问题,可以将替换调用链接起来:

replace

这样,结果字符串将在traindf['TitleGroup'] = traindf['Title'].replace( ['Mrs','Miss','Mme','Ms','Lady','Mlle','the Countess','Dona'], 'female', regex=True ).replace(['Sir','Don','Rev','Mr',],'male', regex = True) 中存储一次,所有替换都将完成。