如何在忽略NaN值的同时将我的DataFrame转换为字典?

时间:2016-11-01 16:06:36

标签: python pandas dictionary

我有一个具有以下结构的DataFrame:

dictionary = lookup.set_index('Question').T.to_dict()

我想将其转换为字典词典。外部字典的键值是从“问题”列中获得的。所以我尝试了以下内容:

{1: {'0': nan,
  '1': 'Never',
  '2': 'Sometimes',
  '3': 'Usually',
  '4': 'Always',
  '5': nan,
  '6': nan,
  '7': nan,
  '8': nan,
  '9': nan},
 2: {'0': nan,
  '1': 'Never',
  '2': 'Sometimes',
  '3': 'Usually',
  '4': 'Always',
  '5': nan,
  '6': nan,
  '7': nan,
  '8': nan,
  '9': nan} ...... 

我得到了:

{1: {'1': 'Never',
  '2': 'Sometimes',
  '3': 'Usually',
  '4': 'Always'},
 2: {'1': 'Never',
  '2': 'Sometimes',
  '3': 'Usually',
  '4': 'Always'} ...... 

如何删除具有NaN值的键?所需的字典是:

netstat -an

2 个答案:

答案 0 :(得分:2)

您可以使用词典理解,如果它们是NaN,则过滤掉非字符串值(使用numpy.isnan):

>>> from numpy import isnan, nan
>>> d = {1: {'0': nan,                                                 
...:         '1': 'Never',                  
...:         '2': 'Sometimes',
...:         '3': 'Usually',
...:         '4': 'Always',
...:         '5': nan,
...:         '6': nan}, 
...:     2: {'0': nan,
...:         '1': 'Never',
...:         '2': 'Sometimes',
...:         '3': 'Usually',
...:         '4': 'Always',
...:         '5': nan,
...:         '6': nan}}
>>> { k1: { k2: v for k2, v in d2.iteritems() if type(v) == str or not isnan(v) }
      for k1, d2 in d.iteritems() }
{1: {'1': 'Never', '2': 'Sometimes', '3': 'Usually', '4': 'Always'},
 2: {'1': 'Never', '2': 'Sometimes', '3': 'Usually', '4': 'Always'}}

答案 1 :(得分:2)

循环你的行并生成每个系列的dict(问题),其中na值被删除:

{q: s.dropna().to_dict() for q, s in df.set_index('Question').iterrows()}