【问题标题】:Convert pandas data frame to nested json将 pandas 数据框转换为嵌套 json
【发布时间】:2020-12-16 04:45:57
【问题描述】:

我有一个由 csv 文件制成的 Pandas 数据框,我想将其转换为自定义嵌套 JSON

    df = pd.read_csv("/content/analog.csv", sep=",")

数据框是这样的:

datetime                key1    key2    key3        col1    col2    col3    ...  col100 
2020-08-27T02:28:00Z    WECP001 27001   con0000     1001    1002    1003    ...  1005   
2020-08-27T02:28:01Z    WECP001 27001   con0000     11      22      33      ...  99

我想将此 df 转换为嵌套的 json,例如:

[ 
    {
       "datetime":"2020-08-27T02:28:00Z"
       "key1:"WECP001"
       "key2:"27001"
       "key3":"con0000"
       "DATA":{
               "col1":1001,
               "col2":1002,
               "col3":1003, 
               ...
               "col100":1005
              }
    },
    {
       "datetime":"2020-08-27T02:28:01Z"
       "key1:"WECP001"
       "key2:"27001"
       "key3":"con0000"
       "DATA":{
               "col1":11,
               "col2":22,
               "col3":33, 
               ...
               "col100":99
              }
    }
]

这是我累了的代码,但我得到了错误的结果

cols = df.columns.difference(['datetime','key1','key2','key3'])
j = (df.groupby(['datetime','key1','key2','key3'])[cols]
       .apply(lambda x: x.to_dict('r'))
       .reset_index(name='DATA')
       .to_json(orient='records'))
print (j)

输出如下:

{
   "datetime":"2020-08-27T02:28:00Z"
   "key1:"WECP001"
   "key2:"27001"
   "key3":"con0000"
   "DATA":[{
           "col1":1001,
           "col2":1002,
           "col3":1003, 
           ...
           "col100
           }]

我的代码的问题是“数据”部分变成了列表而不是字典 感谢帮助

【问题讨论】:

  • 您能分享一下到目前为止您尝试过什么吗?问题是,我们都在这里提供帮助,但我们希望看到任何努力。看起来您希望我们为您实施...
  • 对不起朋友,正如你所说,我应该展示我的工作让我附加我的代码。

标签: python json pandas nested


【解决方案1】:

试试这个

df2 = df.iloc[:, :4]
df2['Data'] = df[[f'col{i}' for i in range(1, 4)]].to_dict(orient='records')
print(df2.to_json(orient='records'))

输出:

[
  {
    "datetime": "2020-08-27T02:28:00Z",
    "key1": "WECP001",
    "key2": 27001,
    "key3": "con0000",
    "Data": {
      "col1": 1001,
      "col2": 1002,
      "col3": 1003
    }
  },
  {
    "datetime": "2020-08-27T02:28:01Z",
    "key1": "WECP001",
    "key2": 27001,
    "key3": "con0000",
    "Data": {
      "col1": 11,
      "col2": 22,
      "col3": 33
    }
  }
]

【讨论】:

  • 谢谢,我明白了。根据你的想法,我尝试了这个:df2 = df.iloc[:, :4] df2['DATA'] = df.iloc[:, 5:].to_dict(orient='records')print(df2.to_json(orient='records')),我得到了答案
【解决方案2】:
import pandas as pd

df = pd.read_csv("***abc.csv", sep=",")

df2 = df.iloc[:, :4]
df2['DATA'] = df.iloc[:, 5:].to_dict(orient='records')

print(df2.to_json(orient='records', lines=True))

结果:

{
   "datetime":"2020-08-27T02:28:00Z"
   "key1:"WECP001"
   "key2:"27001"
   "key3":"con0000"
   "DATA":{
           "col1":1001,
           "col2":1002,
           "col3":1003, 
           ...
           "col100": 
           }
}
{....}
{....}

【讨论】:

    猜你喜欢
    • 2017-03-21
    • 1970-01-01
    • 2019-11-24
    • 1970-01-01
    • 2022-01-21
    • 2019-05-12
    • 2020-11-12
    • 2021-12-01
    相关资源
    最近更新 更多