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

使用单元素元组作为键的嵌套字典创建Pandas DataFrame时出现NaN问题

关于嵌套字典创建Pandas DataFrame时单元素元组键导致NaN的问题

这确实是个挺让人困惑的现象,在你使用的Pandas 0.19.2版本里,处理单元素元组作为嵌套字典内层键时,确实存在这样的逻辑bug。

问题原因分析

Pandas在通过嵌套字典构建DataFrame时,会尝试自动推断行/列索引:

  • 当内层字典的键是多元素元组时,Pandas会识别出这是多级行索引(MultiIndex),外层字典的键(0-5)作为列名,每个列对应的字典值能正确匹配到多级索引的行上,所以显示正常。
  • 但当内层字典的键是单元素元组时,老版本的Pandas会错误地把这个单元素元组当成普通的行索引标签,但在映射值的时候,没有正确将字典里的单元素元组键与行索引匹配,导致所有单元格都填充为NaN。这个问题在后续的Pandas版本(比如0.20及以上)中已经被修复了。

解决方案

有两种方式可以解决这个问题:

1. 升级Pandas版本

如果项目允许,直接升级到较新的Pandas版本(比如1.x系列),升级后再运行你的代码,单元素元组的情况就能正常生成DataFrame,输出会和多元素元组的情况一致。

2. 手动处理字典(适用于无法升级的场景)

你可以提前转换内层字典的键,把单元素元组拆解成单个值,再构建DataFrame:

import pandas as pd

dict1 = { 0: {('kfield',): 100.0}, 1: {('kfield',): 101.0}, 2: {('kfield',): 102.5}, 3: {('kfield',): 103.5}, 4: {('kfield',): 104.5}, 5: {('kfield',): 105.5} }

# 转换内层字典的键,将单元素元组转为单个值
dict1_fixed = {}
for col, inner_dict in dict1.items():
    for tuple_key, val in inner_dict.items():
        # 取出元组的唯一元素作为新键
        new_key = tuple_key[0]
        dict1_fixed[col] = {new_key: val}

df = pd.DataFrame(dict1_fixed)
print(df)

执行后输出:

0      1      2      3      4      5
kfield  100.0  101.0  102.5  103.5  104.5  105.5

或者你也可以显式指定多级索引,再逐个填充值:

import pandas as pd

dict1 = { 0: {('kfield',): 100.0}, 1: {('kfield',): 101.0}, 2: {('kfield',): 102.5}, 3: {('kfield',): 103.5}, 4: {('kfield',): 104.5}, 5: {('kfield',): 105.5} }

# 创建多级行索引
index = pd.MultiIndex.from_tuples([('kfield',)])
df = pd.DataFrame(index=index)

# 逐个列填充值
for col, val_dict in dict1.items():
    df[col] = list(val_dict.values())

print(df)

这个方法也能得到正确的结果。

内容的提问来源于stack exchange,提问作者BBC

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:56:26