如何将值为odict_items的字典转换为指定格式的pandas DataFrame
问题场景
现有字典所有值均为odict_items类型,结构示例:
{1: odict_items([('a', 0.0952), ('b', 14.583351), ('c', 120000), ('d', 6000)]), 2: odict_items([('a', 0.098733336), ('b', 14.526156), ('c', 120000), ('d', 6000)])}
直接执行df = pd.DataFrame(dict.values())转换时,会得到每列存储键值元组的错误结果:
0 1 2 3 0 (a, 0.0952) (b, 14.583351) (c, 120000) (d, 6000) 1 (a, 0.0987) (b, 14.526156) (c, 120000) (c, 6000)
目标输出要求:原字典的键作为行索引,odict_items中的键作为列名,对应数值作为单元格值,格式如下:
a b c d 1 0.0952 14.583351 120000 6000 2 0.0987 14.526156 120000 6000
可行方案
核心处理逻辑是先将每个odict_items对象转为普通字典,让pandas可以正确识别键值对应关系,两种常用写法:
- 写法1:使用
from_dict指定索引方向,语义更清晰
# 假设原字典变量名为raw_dict df = pd.DataFrame.from_dict( {idx: dict(item_pairs) for idx, item_pairs in raw_dict.items()}, orient='index' )
- 写法2:构造后转置,代码更简洁
df = pd.DataFrame({idx: dict(item_pairs) for idx, item_pairs in raw_dict.items()}).T
错误原因
直接传入dict.values()时,pandas会将每个odict_items视为一个普通可迭代对象,把其中的每个(键, 值)元组当做单个单元格值存入列,无法自动解析元组内的列名和数值对应关系,因此得到不符合预期的结果。
内容的提问来源于stack exchange,提问作者Dushi Fdz
相关产品推荐
相关产品推荐

