如何将包含元组列表的字典中的字典转换为熊猫数据框

Posted

技术标签:

【中文标题】如何将包含元组列表的字典中的字典转换为熊猫数据框【英文标题】:How to convert dictionary inside a dictionary which contains a list of tuples into a pandas dataframe 【发布时间】:2021-06-01 17:11:57 【问题描述】:

我有一本这样的字典


  'S1' :
     
       'w1':[  ('a',0), ('b',1), ('c',3)],
       'w2':[  ('a',1), ('b',2), ('c',5)], 
       'w3':[  ('a',1), ('b',1), ('c',4)]
     ,
 'S2' :      
    
      'w4':[  ('a',1), ('b',2), ('c',5)],
      'w5':[  ('a',0), ('b',3), ('c',4)], 
      'w6':[  ('a',3), ('b',3), ('c',6)]
    

我想把它转换成这样的熊猫数据框:

有人可以帮我解决这个问题吗?

【问题讨论】:

【参考方案1】:

对字典列表使用嵌套列表推导和合并字典并传递给DataFrame 构造函数:

L = [**'Col S': k,'Col W':k1, **dict(v1) for k, v in d.items() for k1, v1 in v.items()]

df = pd.DataFrame(L)
print (df)
  Col S Col W  a  b  c
0    S1    w1  0  1  3
1    S1    w2  1  2  5
2    S1    w3  1  1  4
3    S2    w4  1  2  5
4    S2    w5  0  3  4
5    S2    w6  3  3  6

MultiIndex 的解决方案:

d = (k, k1): dict(v1) for k, v in d.items() for k1, v1 in v.items()

df = pd.DataFrame.from_dict(d, orient='index')
print (df)
       a  b  c
S1 w1  0  1  3
   w2  1  2  5
   w3  1  1  4
S2 w4  1  2  5
   w5  0  3  4
   w6  3  3  6

然后设置索引名称并将MultiIndex转换为列,谢谢@sammywemmy:

df = df.rename_axis(index = ['Col S', 'Col W']).reset_index()
print (df)
  Col S Col W  a  b  c
0    S1    w1  0  1  3
1    S1    w2  1  2  5
2    S1    w3  1  1  4
3    S2    w4  1  2  5
4    S2    w5  0  3  4
5    S2    w6  3  3  6

【讨论】:

您可以使用rename_axis 扩展第二个答案:df.rename_axis(index = ['Col S', 'Col W']).reset_index() @jezrael,600k+ 恭喜 :) @AkshaySehgal - 谢谢。 这太棒了。非常感谢 Jezrael,Akshay。

以上是关于如何将包含元组列表的字典中的字典转换为熊猫数据框的主要内容,如果未能解决你的问题,请参考以下文章

使用元组键将 Pandas 数据框转换为字典以进行三元图

如何将包含列表的列转换为熊猫数据框中的单独列? [复制]

如何从字典列表中提取数据到熊猫数据框中?

将带有列表的字典转换为熊猫数据框

如何将字典、集合、元组列表的多列转换为列

如何将字典附加到熊猫数据框?