【问题标题】:convert pandas dataframe to a nested json将熊猫数据框转换为嵌套的 json
【发布时间】:2020-10-18 00:48:24
【问题描述】:

我有一个如下所示的数据框,其中有一列包含已嵌套的字典列表:

import pandas as pd

data = {'First':  ['First value', 'Second value'],
    'Second': ['First value', 'Second value'],
    'third': ['First value', 'Second value'],
    'forth': ['[{"values": "","entity": "datetime","","Turn":  [{"expression": "","tid": "","type": "", "value": "","mod": "","anchor": "","beginPoint": "","endPoint": ""}]}]','[{"values": "","entity": "datetime","Turn": [{"expression": "","tid": "","type": "", "value": "","mod": "","anchor": "","beginPoint": "","endPoint": ""}]}]'],
    }

df = pd.DataFrame (data, columns = ['First','second','third','forth'])

我想把它转换成下面的json格式保存:

[
  {
    "first": "",
    "second": "",
    "third": "",
    "forth": [
        {
          "values": "",
          "entity": "",
          "TIMEX3": [
            {
              "expression": "",
              "tid": "",
              "type": "",
              "value": "",
              "mod": "",
              "anchorTimeID": "",
              "beginPoint": "",
              "endPoint": ""
                    }
                  ]
                }
              ]
            },...

我尝试了以下,但是输出太乱了,看起来不像我想保存的输出

  my_json = (df.groupby(['text','intent','domain'], as_index=False)
               .apply(lambda x: x[['entities']].to_dict('r'))
               .reset_index()
               .to_json(orient='records',indent= 2))

【问题讨论】:

    标签: python json pandas nested


    【解决方案1】:

    我相信,你离你想要的格式不远了。唯一的问题是列forth 包含作为字符串的字典。一种可能的方法是将所有内容转换回字典,使用 eval 将字符串转换回字典,并使用 json 解析器很好地打印它:

    import pandas as pd
    import json
    
    data = {'First':  ['First value', 'Second value'],
        'Second': ['First value', 'Second value'],
        'third': ['First value', 'Second value'],
        'forth': ['[{"values": "","entity": "datetime","Turn":  [{"expression": "","tid": "","type": "", "value": "","mod": "","anchor": "","beginPoint": "","endPoint": ""}]}]','[{"values": "","entity": "datetime","Turn": [{"expression": "","tid": "","type": "", "value": "","mod": "","anchor": "","beginPoint": "","endPoint": ""}]}]'],
        }
    df = pd.DataFrame (data, columns = ['First','Second','third','forth'])
    
    my_dict = df.to_dict(orient='records')
    for row in my_dict:
        row['forth'] = eval(row['forth'])
    my_json = json.dumps(my_dict, indent=2)
    print(my_json)
    

    有两个小的更正,Second 键上的大写,以及 forth 键中的无效条目:, "",

    这是我的输出的副本:

    [
      {
        "First": "First value",
        "Second": "First value",
        "third": "First value",
        "forth": [
          {
            "values": "",
            "entity": "datetime",
            "Turn": [
              {
                "expression": "",
                "tid": "",
                "type": "",
                "value": "",
                "mod": "",
                "anchor": "",
                "beginPoint": "",
                "endPoint": ""
              }
            ]
          }
        ]
      },  ...
    

    如果列 forth 已经是数据框中的字典,您可以直接调用 to_json 并且格式将是您想要的。例如,您可以尝试将更正后的 my_dict 转换回数据框:

    test_df = pd.DataFrame(my_dict)
    print(test_df.to_json(orient='records', indent=2))
    

    【讨论】:

      猜你喜欢
      • 2021-10-08
      • 2021-06-13
      • 2022-01-06
      • 2021-08-21
      • 1970-01-01
      • 2019-12-23
      • 2021-03-30
      相关资源
      最近更新 更多