• 55_Pandas.DataFrame 转换为 JSON 字符串/文件并保存 (to_json)


    55_Pandas.DataFrame 转换为 JSON 字符串/文件并保存 (to_json)

    使用pandas.DataFrame的方法to_json(),可以将pandas.DataFrame转为JSON格式字符串(str类型)或者输出(保存)为JSON格式文件。

    在此,对以下内容进行说明。有关其他参数,请参阅上面的官方文档。

    • pandas.DataFrame.to_json() 的基本用法
      • 转换为JSON格式字符串
      • 输出(保存)为JSON格式文件
        • 文件压缩:参数压缩
    • 指定格式:参数orient
      • split
      • records
        • JSON Lines(.jsonl)
      • index
      • columns(默认值)
      • values
      • table

    如果要将 pandas.DataFrame 转换为字典(dict 类型),请使用 to_dict() 方法。

    另外,用pandas读写(输入/输出)CSV文件和Excel文件见以下文章。

    这里以创建如下 pandas.DataFrame 为例。

    import pandas as pd
    import pprint
    import json
    
    df = pd.DataFrame({'col1': [1, 2, 3], 'col2': ['a', 'x', '啊']},
                      index=['row1', 'row2', 'row3'])
    
    print(df)
    #       col1 col2
    # row1     1    a
    # row2     2    x
    # row3     3    啊
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    pandas.DataFrame.to_json() 的基本用法

    转换为JSON格式字符串

    当你从 pandas.DataFrame 调用 to_json() 方法时,默认情况下它被转换为 JSON 格式字符串(str 类型),如下所示。

    print(df.to_json())
    # {"col1":{"row1":1,"row2":2,"row3":3},"col2":{"row1":"a","row2":"x","row3":"\u554a"}}
    
    print(type(df.to_json()))
    # 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    非 ascii 字符(例如双字节字符)是 Unicode 转义的。如果参数 force_ascii=False,则不会进行 Unicode 转义。

    输出(保存)为JSON格式文件

    如果您将路径指定为第一个参数,它将被保存为一个文件。未指定路径时输出的字符串按原样写入文件。

    path = 'data/sample_from_pandas_columns.json'
    
    df.to_json(path)
    
    • 1
    • 2
    • 3
    with open(path) as f:
        s = f.read()
        print(s)
        print(type(s))
    # {"col1":{"row1":1,"row2":2,"row3":3},"col2":{"row1":"a","row2":"x","row3":"\u554a"}}
    # 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    使用open()读取时,参数encoding='unicode-escape’会将Unicode转义序列\uXXXX转换为对应的字符。

    with open(path, encoding='unicode-escape') as f:
        s = f.read()
        print(s)
        print(type(s))
    # {"col1":{"row1":1,"row2":2,"row3":3},"col2":{"row1":"a","row2":"x","row3":"啊"}}
    # 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    使用标准库 json 模块的 json.load() 函数作为字典加载。在这种情况下,默认情况下 Unicode 转义序列 \uXXXX被转换为相应的字符。

    with open(path) as f:
        d = json.load(f)
        print(d)
        print(type(d))
    # {'col1': {'row1': 1, 'row2': 2, 'row3': 3}, 'col2': {'row1': 'a', 'row2': 'x', 'row3': '啊'}}
    # 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    文件压缩:参数压缩

    通过指定从 pandas 版本 0.21.0 添加的参数压缩,可以在输出文件时压缩文件。

    指定“gzip”、“bz2”、“xz”之一。

    df.to_json('data/sample_from_pandas_columns.gz', compression='gzip')
    
    • 1

    指定格式:参数orient

    参数orient可以指定如何将pandas.DataFrame行标签索引、列标签列和值输出为JSON。

    在这里,还显示了使用 json.loads() 将输出字符串转换为字典并使用 pprint() 显示的结果。

    split

    {index -> [index], columns -> [columns], data -> [values]}

    print(df.to_json(orient='split'))
    # {"columns":["col1","col2"],"index":["row1","row2","row3"],"data":[[1,"a"],[2,"x"],[3,"\u554a"]]}
    
    pprint.pprint(json.loads(df.to_json(orient='split')))
    # {'columns': ['col1', 'col2'],
    #  'data': [[1, 'a'], [2, 'x'], [3, '啊']],
    #  'index': ['row1', 'row2', 'row3']}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    records

    [{column -> value}, ... , {column -> value}]

    print(df.to_json(orient='records'))
    # [{"col1":1,"col2":"a"},{"col1":2,"col2":"x"},{"col1":3,"col2":"\u554a"}]
    
    pprint.pprint(json.loads(df.to_json(orient='records')), width=40)
    # [{'col1': 1, 'col2': 'a'},
    #  {'col1': 2, 'col2': 'x'},
    #  {'col1': 3, 'col2': '啊'}]
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    JSON Lines(.jsonl)

    如果参数 orient='records,并且参数 lines=True,它将是一个字符串,每个 {column: value} 都有一个换行符。

    print(df.to_json(orient='records', lines=True))
    # {"col1":1,"col2":"a"}
    # {"col1":2,"col2":"x"}
    # {"col1":3,"col2":"\u554a"}
    
    • 1
    • 2
    • 3
    • 4

    index

    {index -> {column -> value}}

    print(df.to_json(orient='index'))
    # {"row1":{"col1":1,"col2":"a"},"row2":{"col1":2,"col2":"x"},"row3":{"col1":3,"col2":"\u554a"}}
    
    pprint.pprint(json.loads(df.to_json(orient='index')))
    # {'row1': {'col1': 1, 'col2': 'a'},
    #  'row2': {'col1': 2, 'col2': 'x'},
    #  'row3': {'col1': 3, 'col2': '啊'}}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    columns(默认值)

    {column -> {index -> value}}

    如果省略了 orient 参数(默认),则为这种格式。

    print(df.to_json(orient='columns'))
    # {"col1":{"row1":1,"row2":2,"row3":3},"col2":{"row1":"a","row2":"x","row3":"\u554a"}}
    
    pprint.pprint(json.loads(df.to_json(orient='columns')))
    # {'col1': {'row1': 1, 'row2': 2, 'row3': 3},
    #  'col2': {'row1': 'a', 'row2': 'x', 'row3': '啊'}}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    values

    print(df.to_json(orient='values'))
    # [[1,"a"],[2,"x"],[3,"\u554a"]]
    
    pprint.pprint(json.loads(df.to_json(orient='values')))
    # [[1, 'a'], [2, 'x'], [3, '啊']]
    
    • 1
    • 2
    • 3
    • 4
    • 5

    table

    一种包含数据结构方案信息的格式。

    print(df.to_json(orient='table'))
    # {"schema": {"fields":[{"name":"index","type":"string"},{"name":"col1","type":"integer"},{"name":"col2","type":"string"}],"primaryKey":["index"],"pandas_version":"0.20.0"}, "data": [{"index":"row1","col1":1,"col2":"a"},{"index":"row2","col1":2,"col2":"x"},{"index":"row3","col1":3,"col2":"\u554a"}]}
    
    pprint.pprint(json.loads(df.to_json(orient='table')))
    # {'data': [{'col1': 1, 'col2': 'a', 'index': 'row1'},
    #           {'col1': 2, 'col2': 'x', 'index': 'row2'},
    #           {'col1': 3, 'col2': '啊', 'index': 'row3'}],
    #  'schema': {'fields': [{'name': 'index', 'type': 'string'},
    #                        {'name': 'col1', 'type': 'integer'},
    #                        {'name': 'col2', 'type': 'string'}],
    #             'pandas_version': '0.20.0',
    #             'primaryKey': ['index']}}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    Connor学Android - Drawable
    java基础知识面试题目
    LeetCode --- 1470. Shuffle the Array 解题报告
    HarmonyOS/OpenHarmony应用开发-DevEco Studio帮助快速入门的使用
    从零安装Redis
    机器学习实战(1)——概览
    前端例程20220728:按钮点击涟漪效果
    mysql源码分析——InnoDB的内存结构分析
    xilinx FPGA IOB约束使用以及注意事项
    Java查询数据放入word模板中并在前端导出下载
  • 原文地址:https://blog.csdn.net/qq_18351157/article/details/128115556