【问题标题】:How to convert a Python dataframe object to json?如何将 Python 数据框对象转换为 json?
【发布时间】:2021-06-20 02:14:34
【问题描述】:

我有一个这样的数据框:

   date  ...   ID     value_1  value_2  value_3
0  03/03/2018    ...  12345    111       1      30
1  03/03/2018    ...  89547    222       2      50
2  02/03/2018    ...  12345    333       5      80

我想把它转换成这样的 JSON 格式:


{
    "XYZ": [
        {
            "Id": 123456,
            "date": "2021-03-03 09:00:00", # this field need to change datetime format
            "value_3": 30,
            "value_2": 1,
            "ABC": [
                {
                    "value_1": 111,
                    "type": "int" # 'type' field will always be 'int'
                }
            ]
        },
        {
            "Id": 123456,
            "date": "2021-03-02 09:00:00", # this field need to change datetime format
            "value_3": 80,
            "value_2": 5,
            "ABC": [
                {
                    "value_1": 333,
                    "type": "int" # 'type' field will always be 'int'
                }
            ]
        },
        {
            "Id": 89547,
            "date": "2021-03-03 09:00:00", # this field need to change datetime format
            "value_3": 50,
            "value_2": 2,
            "ABC": [
                {
                    "value_1": 222,
                    "type": "int" # 'type' field will always be 'int'
                }
            ]
        }
    ]
}

我对 Python 中的数据操作不是很熟悉,有没有一种简单的方法来进行转换(内置函数或任何库?)?非常感谢。

【问题讨论】:

    标签: python json pandas dataframe numpy


    【解决方案1】:

    如果您使用 Pandas lib 来处理 DataFrame,它应该如下所示:

    import pandas as pd
    
    df = pd.DataFrame([["a", "b"], ["c", "d"]],
                     index=["row 1", "row 2"],
                     columns=["col 1", "col 2"],)
    
    result = df.to_json(orient="split")
    

    将您的 json 转换为 python 对象:

    import json
    
    parsed = json.loads(result)
    

    【讨论】:

      【解决方案2】:

      用途:

      import json
      
      #convert values to datetimes
      df['documentdate'] = pd.to_datetime(df['documentdate'], dayfirst=True, errors='coerce')
      
      #change format of ABC
      df['ABC'] = df['value_1'].apply(lambda x: [ {"value_1": x, "type": "int" }])             
      #remove columns
      df = df.drop('value_1', axis=1)
      #convert to dict and then to json
      j = json.dumps({"XYZ":df.to_dict(orient='records')}, default=str)
      

      print (j)
      

      编辑:

      对于转换日期时间也可以使用:

      #https://stackoverflow.com/a/11875813/2901002
      from bson import json_util
      import json
      
      json.dumps({"XYZ":df.to_dict(orient='records')}, default=json_util.default)
      

      【讨论】:

      • 谢谢,如果可以的话,只是一个后续问题,如果我想在 json 中将 value_3 显示为 VALUE_3 怎么办,最好的方法是什么?只需更改列名?
      • 嗨@jezrael 谢谢你的回答,我意识到我需要的格式有点不同,我在这里提出了一个新问题stackoverflow.com/questions/66788170/…,你也可以看看吗?非常感谢。
      猜你喜欢
      • 2011-09-28
      • 2016-09-23
      • 2014-04-15
      • 2021-11-18
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      相关资源
      最近更新 更多