【问题标题】:Normalize nested JSON data with Pandas/Python使用 Pandas/Python 规范化嵌套的 JSON 数据
【发布时间】:2020-06-21 18:58:52
【问题描述】:

我正在尝试对类似的样本数据进行标准化

{
  "2018-04-26 10:09:33": [
    {
      "user_id": "M8BE957ZA",
      "ts": "2018-04-26 10:06:33",
      "message": "Hello"
    }
  ],
  "2018-04-27 19:10:55": [
    {
      "user_id": "M5320QS1X",
      "ts": "2018-04-27 19:10:55",
      "message": "Thank you"
    }
  ],

我知道我可以使用json_normalize(data,'2018-04-26 10:09:33',record_prefix= '') 在 pandas 中创建一个表,但日期/时间一直在变化。我怎样才能标准化它,所以我有如下?任何建议

                          user_id.        ts                    message

2018-04-26 10:09:33       M8BE957ZA.      2018-04-26 10:06:33.  Hello
2018-04-26 10:09:33       M5320QS1X       2018-04-27 19:10:55.  Thank you

【问题讨论】:

  • 既然字典的键在字典中重复,为什么不从your_dict.values() 创建你的数据框?你的输出指数对吗?第二行索引从何而来?
  • 获得值后,如何访问 user_id、ts 和消息?创建数据框

标签: python json pandas normalize


【解决方案1】:
test = {
  "2018-04-26 10:09:33": [
    {
      "user_id": "M8BE957ZA",
      "ts": "2018-04-26 10:06:33",
      "message": "Hello"
    }
  ],
  "2018-04-27 19:10:55": [
    {
      "user_id": "M5320QS1X",
      "ts": "2018-04-27 19:10:55",
      "message": "Thank you"
    }
  ]}
df = pd.DataFrame(test).melt()


    variable            value
0   2018-04-26 10:09:33 {'user_id': 'M8BE957ZA', 'ts': '2018-04-26 10:...
1   2018-04-27 19:10:55 {'user_id': 'M5320QS1X', 'ts': '2018-04-27 19:...

读入您的数据框作为您的 dict,然后将其融合以获得上述结构。接下来您可以在值列上使用json_normalize,然后将其重新加入变量列,如下所示:

df.join(json_normalize(df['value'])).drop(columns = 'value').rename(columns = {'variable':'date'})

    date                user_id     ts                  message
0   2018-04-26 10:09:33 M8BE957ZA   2018-04-26 10:06:33 Hello
1   2018-04-27 19:10:55 M5320QS1X   2018-04-27 19:10:55 Thank you

【讨论】:

    猜你喜欢
    • 2019-12-22
    • 2021-12-12
    • 2021-04-18
    • 2020-11-09
    • 1970-01-01
    • 2015-10-19
    • 2018-04-09
    • 1970-01-01
    • 2018-05-23
    相关资源
    最近更新 更多