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.ZipFilegzip.GzipFilebz2.BZ2Filezstandard.ZstdDecompressorlzma.LZMAFiletarfile.TarFilecompression={'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。请参阅fsspecurllib了解更多详细信息,有关存储选项的更多示例,请参阅此处

dtype_backend {'numpy_nullable', 'pyarrow'}, 默认 'numpy_nullable'

应用于结果的后端数据类型DataFrame (仍处于试验阶段)。行为如下:

  • "numpy_nullable":返回 nullable-dtype-backed DataFrame (默认)。

  • "pyarrow":返回 pyarrow 支持的可为空的ArrowDtype DataFrame。

2.0版本中的新增内容。

引擎{“ujson”, “pyarrow”}, 默认“ujson”

要使用的解析器引擎。该"pyarrow"引擎仅在 时可用 lines=True

2.0版本中的新增内容。

返回
Series、DataFrame 或 pandas.api.typing.JsonReader

chunksize当is not0或 时,返回 JsonReader None。否则,返回的类型取决于 的值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