将带有NaN的dataframe转换为深度>=2的嵌套json

2024-04-25 11:33:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有如下带有NaN值的数据帧

Category,Type,Capacity,Efficiency  
Chiller,ChillerA,1000,6.0  
Chiller,ChillerB,2000,5.5  
Cooling Tower,Cooling TowerA,1000,NaN  
Cooling Tower,Cooling TowerB,2000,NaN  

我想把这个数据帧转换成低于json的格式。
有谁能告诉我如何实现这个目标吗

{
    "Chiller":{
        "ChillerA":{
            "Capacity":1000,
            "Efficiency":6.0
        },
        "ChillerB":{
            "Capacity":2000,
            "Efficiency":5.5
        },
    },
    "Cooling Tower":{
        "Cooling TowerA":{
            "Capacity":1000 <=Will not include efficiency because efficiency was NaN for this.

        },
        "Cooling TowerB":{
            "Capacity":2000
        },
    },
}

Tags: 数据jsontypenancapacitytowercategoryefficiency
1条回答
网友
1楼 · 发布于 2024-04-25 11:33:59

这是一个非常健壮的解决方案,可以使用嵌套的dict理解获得所需的输出:

df = df.set_index(['Category', 'Type'])
{level: {chiller: {name: value for name, value in values.items() if not np.isnan(value)} for chiller, values in df.xs(level).to_dict('index').items()} for level in df.index.levels[0]}
#{'Cooling Tower':
#    {'Cooling TowerA':
#       {'Capacity': 1000.0},
#    'Cooling TowerB':
#        {'Capacity': 2000.0}},
# 'Chiller':
#    {'ChillerA': {'Efficiency': 6.0, 'Capacity': 1000.0},
#     'ChillerB': {'Efficiency': 5.5, 'Capacity': 2000.0}}}

相关问题 更多 >