2017-03-02 332 views
1

中的所有值:我嘗試的所有內容都會替換第一列中的鍵值對,但不會替換第一列和第二列中的值。下面是代碼:Python 2.7替換熊貓數據框中的一個熊貓DF

module_names = {442990: 'Thank You', 442896:'Depression', 442924:'Irritability', 442879:'Anxiety', 442985:'sleep', 442875:'Meds'} 
for key, value in module_names.iteritems(): 
    df['module'].replace(key,value,inplace=True) 
print df.head(15) 
for key, value in module_names.iteritems(): 
    df['inResponseTo'].replace(key,value,inplace=True) 
print df.head(15) 

和輸出:

 module inResponseTo botNickname botID result \ 
1  Thank You  442896 Web-Ducky 36931  4 
3  Depression  442924 Web-Ducky 36931  4 
5 Irritability  442879 Web-Ducky 36931  3 
7  Anxiety  442985 Web-Ducky 36931  4 
9   sleep  442875 Web-Ducky 36931 yes 
11   Meds  442875 Web-Ducky 36931 NaN 
13   Meds  442864 Web-Ducky 36931 NaN 
19  Thank You  442896  Ducky 36931  3 

你可以看到我連想成爲簡潔,但我打破它,看看我能發現我的錯誤。現在我很難過。 TIA

回答

1

IIUC如果需要通過dict simpliest在一些替換列值是去除循環:

df['inResponseTo'].replace(module_names,inplace=True) 
print df 
      module inResponseTo botNickname botID result 
1  Thank You Depression Web-Ducky 36931  4 
3  Depression Irritability Web-Ducky 36931  4 
5 Irritability  Anxiety Web-Ducky 36931  3 
7  Anxiety   sleep Web-Ducky 36931  4 
9   sleep   Meds Web-Ducky 36931 yes 
11   Meds   Meds Web-Ducky 36931 NaN 
13   Meds  442864 Web-Ducky 36931 NaN 
19  Thank You Depression  Ducky 36931  3 

如果需要map(其中不匹配得到NaN):

df['inResponseTo'] = df['inResponseTo'].map(module_names) 
print (df) 
      module inResponseTo botNickname botID result 
1  Thank You Depression Web-Ducky 36931  4 
3  Depression Irritability Web-Ducky 36931  4 
5 Irritability  Anxiety Web-Ducky 36931  3 
7  Anxiety   sleep Web-Ducky 36931  4 
9   sleep   Meds Web-Ducky 36931 yes 
11   Meds   Meds Web-Ducky 36931 NaN 
13   Meds   NaN Web-Ducky 36931 NaN 
19  Thank You Depression  Ducky 36931  3 

編輯:

如果需要replace多列:

print (df) 
      module inResponseTo botNickname botID result 
1  Thank You  442896 Web-Ducky 36931 442896 
3  Depression  442924 Web-Ducky 36931 442924 
5 Irritability  442879 Web-Ducky 36931 442879 
7  Anxiety  442985 Web-Ducky 36931 442985 
9   sleep  442875 Web-Ducky 36931 442875 
11   Meds  442875 Web-Ducky 36931 442875 
13   Meds  442864 Web-Ducky 36931 442864 
19  Thank You  442896  Ducky 36931 442896 

df[['inResponseTo','result']] = df[['inResponseTo','result']].replace(module_names) 
print (df) 
      module inResponseTo botNickname botID  result 
1  Thank You Depression Web-Ducky 36931 Depression 
3  Depression Irritability Web-Ducky 36931 Irritability 
5 Irritability  Anxiety Web-Ducky 36931  Anxiety 
7  Anxiety   sleep Web-Ducky 36931   sleep 
9   sleep   Meds Web-Ducky 36931   Meds 
11   Meds   Meds Web-Ducky 36931   Meds 
13   Meds  442864 Web-Ducky 36931  442864 
19  Thank You Depression  Ducky 36931 Depression 
+0

對不起,我仍然得到相同的結果。沒有錯誤只是第一列改變。順便說一句,試圖粘貼我的代碼,但它不工作,對不起。 –

+0

如果我將它應用到第一列,但您的代碼有效,但任何嘗試更改第二列都會讓我陷入困境。 –

+0

順便說一句,剛剛刪除了'模塊'列,它仍然無法正常工作,是否有關鍵字的第二個col:'inResponseTo'? –