python - 从 DataFrame 到嵌套的 Json 对象

标签 python arrays json python-3.x pandas

例如,我有一个数据框 df,第一条记录看起来像这样:

oID mode    flow    custom  s1  s2  plan1   plan2   prop1   prop2   rag eve1    eve2
0   AIR DD  XWERTR1 29.03.2020  16.04.2020  29.03.2020  16.04.2020  29.03.2020  16.03.2020  G   16.03.2020  17.03.2020
1   SEA PP  XWERTR1 07.04.2020  25.03.2020  07.04.2020  25.03.2020  07.04.2020  25.03.2020  A   16.03.2020  17.03.2020
2   AIR DD  XWERTR1 04.04.2020  20.03.2020  04.04.2020  20.03.2020  04.04.2020  20.03.2020  G   16.03.2020  17.03.2020
3   AIR DD  XWERTR1 04.04.2020  20.03.2020  04.04.2020  20.03.2020  04.04.2020  20.03.2020  G   16.03.2020  17.03.2020
4   SEA DD  XWERTR1 04.04.2020  20.03.2020  04.04.2020  20.03.2020  04.04.2020  20.03.2020  R   16.03.2020  17.03.2020

我想要这样的 json:

{
    "_id" : "0",
    "oID" : "0",
    "custom" : "XWERTR1",
    "mode" : "AIR",
    "flow" : "DD",
    "milestone" : {
        "creation" : {
            "s1" : "29.03.2020",
            "plan1" : "29.03.2020",
            "prop1" : "29.03.2020"
        },
        "transp" : {
            "s2" : "16.04.2020",
            "plan2" : "16.04.2020",
            "prop2" : "16.04.2020"
        }
    }
    "rag" : "G",
    "eve1" : "16.03.2020",
    "eve2" : "17.03.2020"
}

实际上,在新创建的“里程碑”字段下,我将创建嵌套类别“creation”和“transp”。它们将分别包含 s1,plan1,prop1 和 s2,plan2,prop2 的值

我有从这里获取的代码:Convert Pandas Dataframe to nested JSON但这还不足以解决我的问题,因为我想在 Json (s2, plan2, prop2) 上添加另一个元素数组。

j = (df.groupby(['oID','mode','flow','custom','rag','eve1','eve2'], as_index=False)
             .apply(lambda x: x[['s1','plan1','prop1']].to_dict('r'))
             .reset_index()
             .rename(columns={0:'creation'})
             .to_json(orient='records',date_format='iso'))

我努力让“create”和“transp”分别包含元素 s1、plan1、prop1 和 s2、plan2、prop2

我该怎么做?

谢谢

最佳答案

一段时间后,我可以使用模板方法解决问题:

d = """{
    "Ord" : "%s",
    "MOT" : "%s",
    "MVT" : "%s",
    "CUST" : "%s",
    "milestone" : {
        "creation" : {
            "sla" : "%s",
            "plan" : "%s",
            "proposed" : "%s"
        },
        "Pickup" : {
            "sla" : "%s",
            "plan" : "%s",
            "proposed" : "%s"
        }
    }
}
"""
js = []

for item in df.values:
    js.append(json.loads(d%tuple(item.tolist())))

print(json.dumps(js))

感谢@PeterMortesen 和 RaminNietzsche 的帮助。

关于python - 从 DataFrame 到嵌套的 Json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60955599/

相关文章:

python - 在python中查找前一个日历日

arrays - ReDim 数组但保留值

arrays - 如何使用 Spark SQL 正确分解 JSON 中的字段

javascript - 批量调用 API 某些响应返回无效的 json 响应正文

python - 如果单元格包含 '-', Pandas 更新数据帧值

python 抓取html字体标签

arrays - 将序列号属性 append 到 JavaScript 中的对象数组

c++ - 为什么编译器在数组为零的情况下不推导出模板参数?

json - 在 Swift 中从 JSON 文件中获取值

python - 比较分组数据帧的值