Skip to main content
 首页 » 编程设计

python之如何从字典中获取 pandas DataFrame

2025年05月04日19lyj

我有以下字典:

{ 
  'aaa':  
   { 
     'x1': 879, 
     'x2': 861, 
     'x3': 876, 
     'x4': 873 
   }, 
 'bbb':  
   { 
     'y1': 700, 
     'y2': 801, 
     'y3': 900 
   } 
}` 

我需要将它转换成 pandas DataFrame:

col1 col2  col3 
aaa  x1    879 
aaa  x2    861 
aaa  x3    876 
aaa  x4    873 
bbb  y1    700 
bbb  y2    801 
bbb  y3    900 

如果我使用 from_dict 函数,则输出不同。

如何获取如上所示的DataFrame?

请您参考如下方法:

尝试堆栈:

d = { 
  'aaa':  
   { 
     'x1': 879, 
     'x2': 861, 
     'x3': 876, 
     'x4': 873 
   }, 
 'bbb':  
   { 
     'y1': 700, 
     'y2': 801, 
     'y3': 900 
   } 
} 
 
df = pd.DataFrame(d) 
df.stack() 

输出:

x1  aaa    879.0 
x2  aaa    861.0 
x3  aaa    876.0 
x4  aaa    873.0 
y1  bbb    700.0 
y2  bbb    801.0 
y3  bbb    900.0 
dtype: float64 

或获得准确的输出:

df.stack().reset_index().set_axis(['col1', 'col2', 'col3'], axis=1, inplace=False) 

输出:

  col1 col2   col3 
0   x1  aaa  879.0 
1   x2  aaa  861.0 
2   x3  aaa  876.0 
3   x4  aaa  873.0 
4   y1  bbb  700.0 
5   y2  bbb  801.0 
6   y3  bbb  900.0 

或者使用melt:

df.reset_index().melt('index').dropna() 

输出:

   index variable  value 
0     x1      aaa  879.0 
1     x2      aaa  861.0 
2     x3      aaa  876.0 
3     x4      aaa  873.0 
11    y1      bbb  700.0 
12    y2      bbb  801.0 
13    y3      bbb  900.0 

要获得正确的列命名:

df.rename_axis(['col1']).reset_index().melt('col1', var_name='col2',value_name='col3').dropna() 

输出:

   col1 col2   col3 
0    x1  aaa  879.0 
1    x2  aaa  861.0 
2    x3  aaa  876.0 
3    x4  aaa  873.0 
11   y1  bbb  700.0 
12   y2  bbb  801.0 
13   y3  bbb  900.0