来自字典的数据框,其中值是列表

时间:2019-04-13 07:46:38

标签: python pandas

dict = {'0': ['hu'],
        '1':['yi'],
        '2':['yu', 'song'],
        '3':['zhou', 'liu', 'wang']}

这是一个简单的字典,我想在熊猫中创建如下格式的数据框。因为这种格式可以帮助我在networkx中加载图关系。

0 hu
1 yi
2 yuan
2 song
3 zhou
3 liu
3 wang

3 个答案:

答案 0 :(得分:3)

您可以先将字典转换为元组列表:

final_arr=[(x, val) for x,y in d.items() for val in y ] #dict renamed as d
final_arr

[('0', 'hu'),
 ('1', 'yi'),
 ('2', 'yu'),
 ('2', 'song'),
 ('3', 'zhou'),
 ('3', 'liu'),
 ('3', 'wang')]

然后使用DataFrame类制作数据框:

df = pd.DataFrame(final_arr)
df

    0   1
0   0   hu
1   1   yi
2   2   yu
3   2   song
4   3   zhou
5   3   liu
6   3   wang

答案 1 :(得分:3)

请注意,请勿将“ dict”用作变量名。在此示例中,我已重命名为“ d”。

使用:

pd.DataFrame.from_dict(d, orient='index').stack().reset_index(level=1, drop=True)

或替代方法:

pd.DataFrame([(k,x) for k, v in d.items() for x in v]).set_index(0)

答案 2 :(得分:2)

由于您是熊猫的新手,所以我为您提供了易于阅读的代码。

  1. 由于熊猫的DataFrame对象需要两个大小相同的列表,如下所示:

    d = {'col1': [1, 2], 'col2': [3, 4]}
    df = pd.DataFrame(data=d)
    df
       col1  col2
    0     1     3
    1     2     4
    

    我们将最初是空的列表设为空:

    numb_list=[]
    text_list=[]
    
  2. 然后,我们遍历您的dict,每次列表包含一个项目时,我们都保存其dict键及其值,并通过pop将其从同一列表中删除。

    for i in dict:
             while (len(dict[i]) >= 1): 
                     numb_list.append(i)
                     text_list.append(dict[i].pop())
    
  3. 最后,我们可以像这样使用DataFrame对象:

    d = {'number': numb_list, 'text': text_list}
    df = pd.DataFrame(data=d)
    
相关问题