【问题标题】:how to convert nested dict to dataframe using python?如何使用python将嵌套的dict转换为数据框?
【发布时间】:2022-07-06 15:34:34
【问题描述】:

我需要将此 dict 转换为 dataframe/csv

data= {
  "message": {
    "id": 474735,
    "token": "GI797jMv8FuG",
    "direction": "outgoing",
    "message_id": "t",
    "to": "user@email.com",
    "from": "user@email.com",
    "subject": "Test Message at July 05, 2022 16:10",
    "timestamp": 1657017652.063772,
    "spam_status": "NotChecked",
    "tag": null
  },
  "status": "Sent",
  "details": "Message for  accepted by aspmx.l.google.com (142.251.12.26) (from 49.248.200.108)",
  "output": "250 2.0.0 OK  1657017654 f1-20020a63de01000000b0040d4ea0274fsi11524255pgg.697 - gsmtp\n",
  "sent_with_ssl": false,
  "timestamp": 1657017654.6172404,
  "time": 1.26
}

我用过这个网站 https://www.convertcsv.com/json-to-csv.htm 我得到了我想要的输出,但需要代码将 dict 转换为数据帧,所以我可以把它放在我的脚本中 请将输出表归档在附件中

enter image description here

【问题讨论】:

  • 您好,感谢您与我们分享您的问题。如果您能提供到目前为止您已经尝试过的内容,以及您的数据框的另一行(因为数据结构有点模糊),那将是最好的。在这种情况下,我相信您会更快地获得所需的答案。真诚的
  • 我尝试在不修改 dict 变量中的任何内容的情况下将 dict 转换为数据帧,但是 json 的结构不是完美的格式(嵌套 dict)以表格和行的形式获得,但是当我使用单个 dict 时它是给我输出
  • 这个 dict / JSON 数据是 API 输出,我想以 CSV 格式存储,为此我正在使用烧瓶

标签: python json pandas dataframe dictionary


【解决方案1】:

您需要创建一个默认值为listdictionary,并在此dictionary 中添加每个元素。

import pandas as pd

tmp = {}
for k,v in data.items():
    if isinstance(v, dict):
        for a,b in v.items():
            tmp.setdefault(f'{k}/{a}', []).append(b)
    else:
        tmp.setdefault(k, []).append(v)
        
        
        
pd.DataFrame(tmp)

输出:

   message/id   message/token   message/direction   message/message_id  message/to  message/from    message/subject message/timestamp   message/spam_status message/tag status  details output  sent_with_ssl   timestamp   time
0   474735      GI797jMv8FuG    outgoing                     t   user@email.com user@email.com  Test Message at July 05, 2022 16:10 1.657018e+09    NotChecked  null    Sent    Message for accepted by aspmx.l.google.com (1...    250 2.0.0 OK 1657017654 f1-20020a63de01000000...    false   1.657018e+09    1.26

【讨论】:

    猜你喜欢
    • 2018-12-06
    • 2021-06-02
    • 2013-09-21
    • 2019-05-09
    • 2021-10-15
    • 2020-07-21
    • 2014-09-23
    • 2019-09-27
    相关资源
    最近更新 更多