2017-10-04 40 views
1

嗨,我試圖讓一個名爲「TitleGroup」這將有人羣這將組與一些無法在Python中替換替換命令值

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.程序正在輸出很少的標題,但看第二行'Mrs'正在輸出爲'男性'? 「夫人」的標題應該替換爲「女性」,但不會。

2.註銷第5行時,它顯示與Title相同名稱的TitleGroup。

3.將正則表達式作爲False輸出與第二點相同的結果。

4.Uncommenting在TitleGroup是所有NaN

即使使用的.loc 6號線的結果說,我不能幫你

回答

0

由於蟒蛇文檔中mentionned爲replace method,該方法將:

返回字符串s的副本,其中所有出現的子字符串舊 被新的替換。

所以,當你第一次更換(traindf['Title'].replace(['Mrs','Miss','Mme','Ms','Lady','Mlle','the Countess','Dona'], 'female', regex = True))你不改變traindf['Title']的內容,但你把導致您traindf['TitleGroup']領域。因此,在traindf['Title']中的每個女士,小姐......都還在那裏。

然後,當你第二替換:traindf['Title'].replace(['Sir','Don','Rev','Mr',],'male', regex=True),仍有一些「太太」在traindf['Title'],並在「夫人」,有「先生」^_ ^,所以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) 

這樣,結果字符串將在traindf['TitleGroup']中存儲一次,並且所有替換都將完成。

+1

它的工作!但映射又把我扔了NaNs?我知道我可以直接使用數字而不是男性,女性和特殊號碼。但從我的理解地圖功能應該已經工作。對? – Pseudo

+0

@Pseudo我不確定你想用數字來實現什麼,如果你需要計算每種類型的出現次數,使用['collections.Counter'](https://docs.python.org/ 3.6/library/collections.html#counter-objects)對象 –

+0

我試圖將它們轉換爲數字,以便我可以在我的機器學習模型中使用它。 – Pseudo