2017-03-02 271 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'? –