使用Python dict替换/清除Pandas DataFrame中的数据

时间:2013-08-05 21:23:44

标签: python pandas

我有一个类似于

的Dataframe(table2)
57                  INVERNESS
361                 INVERNESS
533                 INVERNESS
535     INVERNESS KERRY DOWNS
758           INVERNESS GREEN
807                 INVERNESS
970           INVERNESS POINT
971                 INVERNESS

等等..

我需要使用Dict映射/替换名称(我在Excel表格中有) 当我将翻译表读入Pandas时,我得到一个看起来像

的DF
             NSUBDIVISION
SUBDIVISION 
*HUFFMAN**8MILES NE  OTHER
0                    OTHER
00                   OTHER
000                  OTHER
INVERNESS POINT      INVERNESS

等等...... 当我使用xlate = df.to_dict()将其转换为DICT时,我得到一个看起来像的字典(xlate):

{u'NSUBDIVISION': {u'*HUFFMAN**8MILES NE': u'OTHER',
  u'0': u'OTHER',
  u'00': u'OTHER',
  u'000': u'OTHER',
  u'0000': u'OTHER',
  u'INVERNESS POINT': u'INVERNESS',

所以..on(我提到这个,因为我不确定该词典是否正确形成)

我想做点什么

 table2['SUBDIVISION'].replace(to_replace=xlate,inplace=True)

我想在xlate表的第1列中查找值,将它们与table2 ['SUBDIVISION']匹配,如果找到,则将x2第2列中的值替换为SUBDIVISION的内容,如果不是单独留下(奖励......实际上)如果col 2是NAn,我也想不管它,例如上面发现INVERNESS POINT将被INVERNESS取代

目前我只得到TypeError:unhashable type:'dict'

1 个答案:

答案 0 :(得分:3)

我认为你想创建一个dictionary from the Series(而不是DataFrame):

In [11]: translate_df['NSUBDIVISION'].to_dict()
Out[11]:
{'*HUFFMAN**8MILES NE': 'OTHER',
 '0': 'OTHER',
 '00': 'OTHER',
 '000': 'OTHER',
 'INVERNESS POINT': 'INVERNESS'}

并将其用于replace列:

In [12]: df['SUBDIVISION'].replace(translate_df['NSUBDIVISION'].to_dict())
Out[12]:
0                INVERNESS
1                INVERNESS
2                INVERNESS
3    INVERNESS KERRY DOWNS
4          INVERNESS GREEN
5                INVERNESS
6                INVERNESS
7                INVERNESS
Name: SUBDIVISION, dtype: object