如何将defaultdict(list)转换为Pandas DataFrame

时间:2019-01-10 06:22:15

标签: python pandas dataframe defaultdict

我有一个具有这种结构的defaultdict(list)对象:

{id: [list[list]]}

例如

'a1': [[0.01, 'cat']],

'a2': [[0.09, 'cat']],

'a3': [[0.5, 'dog']],

...

我想将此defaultdict(list)转换为Pandas DataFrame对象。

我尝试了以下操作:

df = pd.DataFrame(list(my_dict.items()), columns=['id', 'category'])

但是,我的“类别”列遇到了问题。这是列表列表的一列。我正在尝试将“类别”中的2个值分成2个单独的列。因此,我最后的DataFrame列将为['id','score','category']。

当我尝试使用下面的Apply功能时:

db['category'].apply(lambda x: x[0][0])

“列表索引超出范围”时出现错误。

我的代码可能有什么问题?如何从列表列表中创建2个新列?

谢谢。

2 个答案:

答案 0 :(得分:1)

我相信您需要:

df = pd.DataFrame([[k] + v[0] for k, v in my_dict.items()], 
                   columns=['id', 'score', 'category'])

或者:

df = pd.DataFrame([(k, v[0][0], v[0][1]) for k, v in my_dict.items()], 
                   columns=['id', 'score', 'category'])

答案 1 :(得分:0)

使用列表理解

例如:

import pandas as pd
d = {'a1': [[0.01, 'cat']], 'a2': [[0.09, 'cat']],'a3': [[0.5, 'dog']]}


df = pd.DataFrame([[k] + j for k,v in d.items() for j in v], columns=['id', 'score', 'category'])
print(df)

输出:

   id  score category
0  a1   0.01      cat
1  a3   0.50      dog
2  a2   0.09      cat