我有一个具有以下结构的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
答案 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()}