如何将含元组键的Python字典转换为Pandas DataFrame?
如何将键为二元组的字典转换为指定结构的DataFrame?
给定如下Python字典,键是由两个字符串组成的元组,值为整数:
mydic = { ('column1', 'index1'):33, ('column1', 'index2'):34, ('column2', 'index1'):35, ('column2', 'index2'):36 }
需要将元组的第一个字符串作为DataFrame的列名,第二个作为行索引,得到如下结构的DataFrame:
| (index) | column1 | column2 |
|---|---|---|
| index1 | 33 | 35 |
| index2 | 34 | 36 |
完全不用手动遍历逐个构建,有两种简洁的Pandas方法可以快速实现:
方法1:利用Series多级索引+unstack
Pandas的Series可以直接将元组键解析为多级索引,再通过unstack方法将指定层级转为列:
import pandas as pd mydic = { ('column1', 'index1'):33, ('column1', 'index2'):34, ('column2', 'index1'):35, ('column2', 'index2'):36 } # 将字典转为带多级索引的Series s = pd.Series(mydic) # 将多级索引的第0层(元组第一个元素)转为列 df = s.unstack(level=0)
执行后df就是你需要的结构,unstack(level=0)指定把元组的第一个元素作为列,剩下的第二个元素自动成为行索引。
方法2:字典转列表+Pivot透视
先把字典的键值对拆分为包含列名、索引、值的三元组列表,再用pivot方法构建DataFrame:
import pandas as pd mydic = { ('column1', 'index1'):33, ('column1', 'index2'):34, ('column2', 'index1'):35, ('column2', 'index2'):36 } # 拆分键值对为三元组列表 df_list = [(col, idx, val) for (col, idx), val in mydic.items()] # 构建DataFrame并透视 df = pd.DataFrame(df_list, columns=['column', 'index', 'value']).pivot( index='index', columns='column', values='value' )
这种方法逻辑更直观,适合理解数据结构转换的过程。
两种方法都避免了手动遍历,Pandas内置方法在处理大数据量时效率远高于手动循环。
内容的提问来源于stack exchange,提问作者Robert
相关产品推荐
相关产品推荐

