字典转DataFrame遇ValueError:索引数据需一维的问题咨询
问题描述
我有如下字典:
my_dict = {(('KBDL', 'KIAH'), ('KBDL', 'KCVG')): 0, (('KSCK', 'KAFW'), ('KSCK', 'KAFW')): 1}
尝试用pd.DataFrame.from_dict(my_dict, orient='index')将其转为DataFrame时,触发错误:ValueError: Index data must be 1-dimensional。
但将字典修改为以下形式后,就能正常运行:
my_dict= {(('KBDL', 'KIAH'), ('KBDL', 'KCVG'), ('KCVG', 'KLAL')): 0, (('KSCK', 'KAFW'), ('KSCK', 'KAFW')): 1}
我期望得到的DataFrame格式如下:
(('KBDL', 'KIAH'), ('KBDL', 'KCVG')) 0 (('KSCK', 'KAFW'), ('KSCK', 'KAFW')) 1
原因分析
第一个字典的所有键都是长度为2的嵌套元组,Pandas会默认尝试将其解析为多层索引(MultiIndex),但此时字典的值是标量,无法匹配多层索引的维度要求,因此报错。
第二个字典的键长度不一致(一个是3元素元组,一个是2元素元组),Pandas无法构造成多层索引,只能将每个键当作一维索引的单个元素,因此可以正常创建DataFrame。
解决方案
以下两种方法都能生成你期望的格式:
方法1:包装键为单元素元组
将原字典的每个键都包裹在一个单元素元组中,让Pandas将其识别为一维索引:
import pandas as pd my_dict = {(('KBDL', 'KIAH'), ('KBDL', 'KCVG')): 0, (('KSCK', 'KAFW'), ('KSCK', 'KAFW')): 1} new_dict = {(k,): v for k, v in my_dict.items()} df = pd.DataFrame.from_dict(new_dict, orient='index', columns=['value']) print(df)
方法2:用Series中转(更简洁)
先通过pd.Series创建序列,再转为DataFrame,Series会自动将嵌套元组当作一维索引元素:
import pandas as pd my_dict = {(('KBDL', 'KIAH'), ('KBDL', 'KCVG')): 0, (('KSCK', 'KAFW'), ('KSCK', 'KAFW')): 1} df = pd.Series(my_dict).to_frame(name='value') print(df)
运行后输出结果:
value ((KBDL, KIAH), (KBDL, KCVG)) 0 ((KSCK, KAFW), (KSCK, KAFW)) 1
内容的提问来源于stack exchange,提问作者user2512443
相关产品推荐
相关产品推荐

