pandas.DataFrame.to_json#

DataFrame.to_json(path_or_buf=None, *, orient=None, date_format=None, double_precision=10, force_ascii=True, date_unit='ms', default_handler=None, lines=False, compression='infer', index=None, indent=None, storage_options=None, mode='w')[源代码]#

将对象转换为 JSON 字符串。

注意:NaN 和 None 将被转换为 null,datetime 对象将被转换为 UNIX 时间戳。

Parameters:
path_or_bufstr, path object, file-like object, or None, default None

字符串、路径对象(实现 os.PathLike[str])或实现 write() 函数的文件对象。如果为 None,则返回结果作为字符串。

orientstr

预期的 JSON 字符串格式指示。

  • Series:

    • 默认为 ‘index’

    • 允许的值为:{‘split’, ‘records’, ‘index’, ‘table’}。

  • DataFrame:

    • 默认为 ‘columns’

    • 允许的值为:{‘split’, ‘records’, ‘index’, ‘columns’, ‘values’, ‘table’}。

  • JSON 字符串的格式:

    • ‘split’ : dict 类似 {‘index’ -> [index], ‘columns’ -> [columns], ‘data’ -> [values]}

    • ‘records’ : list 类似 [{column -> value}, … , {column -> value}]

    • ‘index’ : dict 类似 {index -> {column -> value}}

    • ‘columns’:类似 dict {column -> {index -> value}}

    • ‘values’:仅值数组

    • ‘table’:类似 dict {‘schema’: {schema}, ‘data’: {data}}

    描述数据,其中 data 部分类似于 orient='records'

date_format{None, ‘epoch’, ‘iso’}

日期转换的类型。’epoch’ = epoch 毫秒, ‘iso’ = ISO8601。默认值取决于 orient。对于 orient='table',默认值为 ‘iso’。对于所有其他 orient,默认值为 ‘epoch’。

double_precisionint,默认 10

编码浮点值时使用的十进制位数。可能的最大值为 15。传递大于 15 的 double_precision 将引发 ValueError。

force_asciibool, default True

强制编码字符串为 ASCII。

date_unitstr,默认为 ‘ms’(毫秒)

编码的时间单位,控制时间戳和 ISO8601 的精度。可选值包括 ‘s’、’ms’、’us’、’ns’(分别表示秒、毫秒、微秒和纳秒)。

default_handlercallable,默认为 None

如果对象无法以其他方式转换为适合 JSON 的格式时调用的处理程序。应接收一个参数,即要转换的对象,并返回一个可序列化的对象。

linesbool,默认 False

如果 ‘orient’ 是 ‘records’,则以换行分隔的 JSON 格式写出。如果 ‘orient’ 不正确,则会抛出 ValueError,因为其他格式不是类列表的。

compressionstr or dict, default ‘infer’

用于输出数据的即时压缩。如果为 ‘infer’ 且 ‘path_or_buf’ 是类路径,则根据以下扩展名检测压缩:’.gz’, ‘.bz2’, ‘.zip’, ‘.xz’, ‘.zst’, ‘.tar’, ‘.tar.gz’, ‘.tar.xz’ 或 ‘.tar.bz2’(否则不压缩)。设置为 None 表示不压缩。也可以是字典,其中键 'method' 设置为 {'zip', 'gzip', 'bz2', 'zstd', 'xz', 'tar'} 中的一个,其他键值对将被转发给 zipfile.ZipFile, gzip.GzipFile, bz2.BZ2File, zstandard.ZstdCompressor, lzma.LZMAFiletarfile.TarFile。例如,可以传递以下参数以实现更快的压缩并创建可重现的 gzip 存档:compression={'method': 'gzip', 'compresslevel': 1, 'mtime': 1}

在 1.5.0 版本加入: 增加了对 .tar 文件的支持。

在 1.4.0 版本发生变更: Zstandard 支持。

indexbool 或 None,default None

仅当 ‘orient’ 是 ‘split’、’index’、’column’ 或 ‘table’ 时才使用索引。其中,’index’ 和 ‘column’ 不支持 index=False

indentint, optional

用于缩进每个记录的空格长度。

storage_optionsdict, 可选

适用于特定存储连接的额外选项,例如主机、端口、用户名、密码等。对于 HTTP(S) URL,键值对将作为标头选项转发给 urllib.request.Request。对于其他 URL(例如,以 “s3://”, 和 “gcs://” 开头的 URL),键值对将转发给 fsspec.open。更多详情请参阅 fsspecurllib,有关存储选项的更多示例,请参阅 here

modestr,默认为 ‘w’(写入)

在提供 path_or_buf 时,指定输出的 IO 模式。仅接受 ‘w’(写入)和 ‘a’(追加)参数。mode=’a’ 仅在 lines 为 True 且 orient 为 ‘records’ 时支持。

Returns:
None 或 str

如果 path_or_buf 为 None,则返回生成的 JSON 格式字符串。否则返回 None。

参见

read_json

将 JSON 字符串转换为 pandas 对象。

Notes

indent=0 的行为与标准库不同,标准库不会缩进输出,但会插入换行符。目前,pandas 中 indent=0 和默认的 indent=None 是等效的,但这可能会在未来的版本中发生变化。

orient='table' 在 ‘schema’ 下包含一个 ‘pandas_version’ 字段。这存储了在架构的最新修订版中使用的 pandas 版本。

Examples

>>> from json import loads, dumps
>>> df = pd.DataFrame(
...     [["a", "b"], ["c", "d"]],
...     index=["row 1", "row 2"],
...     columns=["col 1", "col 2"],
... )
>>> result = df.to_json(orient="split")
>>> parsed = loads(result)
>>> dumps(parsed, indent=4)  
{
    "columns": [
        "col 1",
        "col 2"
    ],
    "index": [
        "row 1",
        "row 2"
    ],
    "data": [
        [
            "a",
            "b"
        ],
        [
            "c",
            "d"
        ]
    ]
}

使用 'records' 格式的 JSON 进行 Dataframe 的编码/解码。请注意,使用此编码时,索引标签不会被保留。

>>> result = df.to_json(orient="records")
>>> parsed = loads(result)
>>> dumps(parsed, indent=4)  
[
    {
        "col 1": "a",
        "col 2": "b"
    },
    {
        "col 1": "c",
        "col 2": "d"
    }
]

使用 'index' 格式的 JSON 进行 Dataframe 的编码/解码:

>>> result = df.to_json(orient="index")
>>> parsed = loads(result)
>>> dumps(parsed, indent=4)  
{
    "row 1": {
        "col 1": "a",
        "col 2": "b"
    },
    "row 2": {
        "col 1": "c",
        "col 2": "d"
    }
}

使用 'columns' 格式的 JSON 进行 Dataframe 的编码/解码:

>>> result = df.to_json(orient="columns")
>>> parsed = loads(result)
>>> dumps(parsed, indent=4)  
{
    "col 1": {
        "row 1": "a",
        "row 2": "c"
    },
    "col 2": {
        "row 1": "b",
        "row 2": "d"
    }
}

使用 'values' 格式的 JSON 进行 Dataframe 的编码/解码:

>>> result = df.to_json(orient="values")
>>> parsed = loads(result)
>>> dumps(parsed, indent=4)  
[
    [
        "a",
        "b"
    ],
    [
        "c",
        "d"
    ]
]

使用表格模式进行编码:

>>> result = df.to_json(orient="table")
>>> parsed = loads(result)
>>> dumps(parsed, indent=4)  
{
    "schema": {
        "fields": [
            {
                "name": "index",
                "type": "string"
            },
            {
                "name": "col 1",
                "type": "string"
            },
            {
                "name": "col 2",
                "type": "string"
            }
        ],
        "primaryKey": [
            "index"
        ],
        "pandas_version": "1.4.0"
    },
    "data": [
        {
            "index": "row 1",
            "col 1": "a",
            "col 2": "b"
        },
        {
            "index": "row 2",
            "col 1": "c",
            "col 2": "d"
        }
    ]
}