字典中的数据帧,其中值是列表

2024-05-23 15:06:25 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这是一个简单的dict,我想在pandas中创建一个如下格式的数据帧。因为这种格式帮助我在networkx中加载图形关系。你知道吗

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

Tags: 数据networkx图形pandas关系song格式dict
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类生成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

作为警告,不要使用'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)

因为你是熊猫的新手,我给你一个更容易阅读的代码。你知道吗

  1. 因为panda的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)
    

相关问题 更多 >