pandas.read_json #
- 熊猫。read_json ( path_or_buf、 *、 orient = None、 typ = 'frame'、 dtype = None、 convert_axes = None、 convert_dates = True、 keep_default_dates = True、 precision_float = False、 date_unit = None、 encoding = None、 encoding_errors = 'strict'、 lines = False, chunksize = None, compression = 'infer', nrows = None, storage_options = None, dtype_backend = _NoDefault.no_default, engine = 'ujson' ) [来源] #
将 JSON 字符串转换为 pandas 对象。
- 参数:
- path_or_buf有效的 JSON str、路径对象或类文件对象
任何有效的字符串路径都是可接受的。该字符串可以是 URL。有效的 URL 方案包括 http、ftp、s3 和 file。对于文件 URL,需要一个主机。本地文件可以是:
file://localhost/path/to/table.json
.如果你想传入一个路径对象,pandas 接受任何
os.PathLike
.通过类文件对象,我们引用具有
read()
方法的对象,例如文件句柄(例如通过内置open
函数)或StringIO
.自版本 2.1.0 起已弃用:不推荐使用传递 json 文字字符串。
- 东方str,可选
预期 JSON 字符串格式的指示。兼容的 JSON 字符串可以
to_json()
通过相应的 orient 值生成。可能的方向集是:'split'
: 听写就像{index -> [index], columns -> [columns], data -> [values]}
'records'
: 列出类似[{column -> value}, ... , {column -> value}]
'index'
: 听写就像{index -> {column -> value}}
'columns'
: 听写就像{column -> {index -> value}}
'values'
:只是值数组'table'
: 听写就像{'schema': {schema}, 'data': {data}}
允许的值和默认值取决于typ参数的值。
什么时候,
typ == 'series'
允许的方向是
{'split','records','index'}
默认是
'index'
Series 索引对于 orient 必须是唯一的
'index'
。
什么时候,
typ == 'frame'
允许的方向是
{'split','records','index', 'columns','values', 'table'}
默认是
'columns'
DataFrame 索引对于 orients
'index'
和 必须是唯一的'columns'
。DataFrame 列对于 orients 、 和 必须是
'index'
唯一'columns'
的'records'
。
- type {'frame', 'series'}, 默认 'frame'
要恢复的对象的类型。
- dtype bool 或 dict, 默认 None
如果为 True,则推断 dtypes;如果要指定列的字典,则使用它们;如果为 False,则根本不推断数据类型,仅适用于数据。
对于除 之外的所有
orient
值'table'
,默认值为 True。- Convert_axes bool, 默认 None
尝试将轴转换为正确的数据类型。
对于除 之外的所有
orient
值'table'
,默认值为 True。- Convert_dates bool 或 str 列表,默认 True
如果为 True,则可以转换默认的类似日期的列(取决于 keep_default_dates)。如果为 False,则不会转换任何日期。如果是列名称列表,则这些列将被转换,并且默认的类似日期的列也可能被转换(取决于 keep_default_dates)。
- keep_default_dates bool, 默认 True
如果解析日期(convert_dates 不为 False),则尝试解析默认的类似日期的列。列标签是类似日期的,如果
它以
'_at'
,它以
'_time'
,它开始于
'timestamp'
,是
'modified'
,或者这是
'date'
。
- Precision_float bool,默认 False
设置为在将字符串解码为双精度值时启用更高精度 (strtod) 函数。默认值(False)是使用快速但不太精确的内置功能。
- date_unit str,默认无
用于检测是否转换日期的时间戳单位。默认行为是尝试检测正确的精度,但如果不希望这样做,则传递“s”、“ms”、“us”或“ns”之一以分别强制仅解析秒、毫秒、微秒或纳秒。
- 编码str,默认为'utf-8'
用于解码 py3 字节的编码。
- coding_errors str,可选,默认“strict”
如何处理编码错误。可能值的列表。
1.3.0 版本中的新增功能。
- lines bool, 默认 False
将文件作为每行 json 对象读取。
- chunksize int,可选
返回 JsonReader 对象进行迭代。 有关 的更多信息,请参阅行分隔的 json 文档
chunksize
。仅当lines=True时才能传递此参数。如果为 None,则文件将被一次性读入内存。- 压缩str 或 dict,默认 'infer'
用于磁盘数据的即时解压缩。如果“infer”和“path_or_buf”是类似路径,则检测以下扩展名的压缩:“.gz”、“.bz2”、“.zip”、“.xz”、“.zst”、“.tar” 、“.tar.gz”、“.tar.xz”或“.tar.bz2”(否则不压缩)。如果使用“zip”或“tar”,ZIP 文件必须仅包含一个要读入的数据文件。设置为
None
则不解压缩。也可以是键设置为 { , , , , , }'method'
之一的字典,其他键值对分别转发到 , , , ,或 。作为示例,可以使用自定义压缩字典传递以下内容以进行 Zstandard 解压缩: 。'zip'
'gzip'
'bz2'
'zstd'
'xz'
'tar'
zipfile.ZipFile
gzip.GzipFile
bz2.BZ2File
zstandard.ZstdDecompressor
lzma.LZMAFile
tarfile.TarFile
compression={'method': 'zstd', 'dict_data': my_compression_dict}
1.5.0 版本中的新增功能:添加了对.tar文件的支持。
版本 1.4.0 中更改: Zstandard 支持。
- nrows整数,可选
必须读取的行分隔 json 文件的行数。仅当lines=True时才能传递此参数。如果为 None,则将返回所有行。
- storage_options字典,可选
对于特定存储连接有意义的额外选项,例如主机、端口、用户名、密码等。对于 HTTP(S) URL,键值对将
urllib.request.Request
作为标头选项转发。对于其他 URL(例如以“s3://”和“gcs://”开头),键值对将转发到fsspec.open
。请参阅fsspec
和urllib
了解更多详细信息,有关存储选项的更多示例,请参阅此处。- dtype_backend {'numpy_nullable', 'pyarrow'}, 默认 'numpy_nullable'
应用于结果的后端数据类型
DataFrame
(仍处于试验阶段)。行为如下:"numpy_nullable"
:返回 nullable-dtype-backedDataFrame
(默认)。"pyarrow"
:返回 pyarrow 支持的可为空的ArrowDtype
DataFrame。
2.0版本中的新增内容。
- 引擎{“ujson”, “pyarrow”}, 默认“ujson”
要使用的解析器引擎。该
"pyarrow"
引擎仅在 时可用lines=True
。2.0版本中的新增内容。
- 返回:
- Series、DataFrame 或 pandas.api.typing.JsonReader
chunksize
当is not0
或 时,返回 JsonReaderNone
。否则,返回的类型取决于 的值typ
。
也可以看看
DataFrame.to_json
将 DataFrame 转换为 JSON 字符串。
Series.to_json
将系列转换为 JSON 字符串。
json_normalize
将半结构化 JSON 数据规范化为平面表。
笔记
具体来说
orient='table'
,如果写入DataFrame
字面Index
名称为indexto_json()
的a ,则后续读取操作将错误地将Index
名称设置为None
。这是因为index也被用来DataFrame.to_json()
表示缺失的Index
名称,后续的read_json()
操作无法区分两者。 aMultiIndex
和任何以 开头的名称也会遇到相同的限制'level_'
。例子
>>> from io import StringIO >>> df = pd.DataFrame([['a', 'b'], ['c', 'd']], ... index=['row 1', 'row 2'], ... columns=['col 1', 'col 2'])
使用格式化 JSON 对 Dataframe 进行编码/解码
'split'
:>>> df.to_json(orient='split') '{"columns":["col 1","col 2"],"index":["row 1","row 2"],"data":[["a","b"],["c","d"]]}' >>> pd.read_json(StringIO(_), orient='split') col 1 col 2 row 1 a b row 2 c d
使用格式化 JSON 对 Dataframe 进行编码/解码
'index'
:>>> df.to_json(orient='index') '{"row 1":{"col 1":"a","col 2":"b"},"row 2":{"col 1":"c","col 2":"d"}}'
>>> pd.read_json(StringIO(_), orient='index') col 1 col 2 row 1 a b row 2 c d
使用格式化的 JSON 对 Dataframe 进行编码/解码
'records'
。请注意,此编码不会保留索引标签。>>> df.to_json(orient='records') '[{"col 1":"a","col 2":"b"},{"col 1":"c","col 2":"d"}]' >>> pd.read_json(StringIO(_), orient='records') col 1 col 2 0 a b 1 c d
使用表模式进行编码
>>> df.to_json(orient='table') '{"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"}]}'
下面的例子使用
dtype_backend="numpy_nullable"
>>> data = '''{"index": {"0": 0, "1": 1}, ... "a": {"0": 1, "1": null}, ... "b": {"0": 2.5, "1": 4.5}, ... "c": {"0": true, "1": false}, ... "d": {"0": "a", "1": "b"}, ... "e": {"0": 1577.2, "1": 1577.1}}''' >>> pd.read_json(StringIO(data), dtype_backend="numpy_nullable") index a b c d e 0 0 1 2.5 True a 1577.2 1 1 <NA> 4.5 False b 1577.1