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.LZMAFile或tarfile.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。更多详情请参阅fsspec和urllib,有关存储选项的更多示例,请参阅 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" } ] }