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,日期时间对象将被转换为 UNIX 时间戳。
- 参数:
- 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’。已弃用,版本 3.0.0: ‘epoch’ 日期格式已被弃用,将在未来版本中删除,请改用 ‘iso’。
- double_precisionint, 默认值 10
编码浮点值时使用的十进制位数。可能的最大值为 15。传递大于 15 的 double_precision 将引发 ValueError。
- force_asciibool, 默认值 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}。- indexbool 或 None, 默认值 None
当 ‘orient’ 是 ‘split’、‘index’、‘column’ 或 ‘table’ 时,索引才会被使用。其中,‘index’ 和 ‘column’ 不支持 index=False。如果列名是字符串 ‘index’ 且具有空的
Index或本身就是 ‘index’,则会引发ValueError。- indentint, 可选
用于缩进每个记录的空白字符长度。
- storage_optionsdict, optional
对于特定存储连接有意义的额外选项,例如主机、端口、用户名、密码等。对于 HTTP(S) URL,键值对将作为标头选项转发到
urllib.request.Request。对于其他 URL(例如,以“s3://”和“gcs://”开头),键值对将转发到fsspec.open。有关更多详细信息,请参阅fsspec和urllib,有关存储选项的更多示例,请参阅 此处。- modestr, 默认值 ‘w’ (写入)
在提供 path_or_buf 时指定输出的 IO 模式。接受的参数仅为 ‘w’ (写入) 和 ‘a’ (追加)。mode=’a’ 仅在 lines 为 True 且 orient 为 ‘records’ 时支持。
- 返回:
- None or str
如果 path_or_buf 为 None,则返回生成的 json 格式作为字符串。否则返回 None。
另请参阅
read_json将 JSON 字符串转换为 pandas 对象。
注意
indent=0的行为与标准库不同,标准库不缩进输出但会插入换行符。当前,indent=0和默认的indent=None在 pandas 中是等效的,但这可能会在未来的版本中更改。orient='table'在 ‘schema’ 下包含一个 ‘pandas_version’ 字段。它存储了用于模式最新修订的 pandas 版本。示例
>>> 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 进行编码/解码。请注意,使用此编码时不会保留索引标签。>>> 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" }} ] }}