You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

字典转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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 03:31:51