pandas.read_json(path_or_buf=None, orient=None, typ='frame', dtype=None, convert_axes=None, convert_dates=True, keep_default_dates=True, numpy=False, precise_float=False, date_unit=None, encoding=None, encoding_errors='strict', lines=False, chunksize=None, compression='infer', nrows=None, storage_options=None)
将JSON字符串转换为pandas对象。
参数: | path_or_buffer:JSON str, path对象 或 file-like 对象 任何有效的字符串路径都可以接受。字符串可以是URL。 有效的URL方案包括http、ftp、s3和file。对于文件url, 需要一个主机。本地文件可以是:
如想传入一个路径对象,pandas接受任何 通过文件类对象,我们使用 例如,文件句柄(例如通过内置的 iorient: 指示预期的JSON字符串格式。 兼容的JSON字符串可以由 并具有相应的方向值。可能的方向集合为: 1) 2) 3) 4) 5) 允许的值和默认值取决于typ参数的值。 6 )当 orients 可以为 默认为 Series index 必须是唯一的 orient 7)当 orients 可以为 默认为 DataFrame index 必须是唯一的 orients DataFrame 列 必须是唯一的 orients typ: 要恢复的对象类型。 dtype: 如果为 则使用那些;如果为 除‘table’之外的,所有 在0.25.0版更改:不适用于 convert_axes: 尝试将axes转换为适当的dtypes 除 在0.25.0版更改:不适用于 convert_dates:bool 或 str的list, 默认为 True 如果为True,则可以转换默认的类似于日期的列(取决于keep_default_dates)。 如果为False,则没有日期将被转换。如果是列名称列表,那么这些列将被转换, 默认的类似日期的列也可能被转换(取决于keep_default_dates)。 keep_default_dates:bool, 默认为 True 如果解析日期(convert_dates不是False),则尝试解析默认的类似日期的列。 列标签类似于如下: 1)如结尾为 2)如结尾为 3)如开始为 4)如为 5)如为 numpy: 直接解码到numpy数组。只支持数字数据,但支持非数字的列和索引标签。 还要注意,如果numpy=True,每个术语的JSON排序必须相同。 1.0.0版后已移除。 precise_float: 设置为在将字符串解码为双精度值时启用更高精度(strtod)函数。 默认(False)是使用快速但不精确的内置功能。 date_unit: 用于检测是否转换日期的时间戳单元。默认行为是尝试并检测正确的精度, 但如果不希望这样做, 则通过's' 、'ms'、'us' '或'ns'中的一个来分别强制只解析秒、毫秒、微秒或纳秒。 encoding: 用于解码py3字节的编码 encoding_errors: 如何处理编码错误。可能值的列表。 1.3.0新版功能。 lines: 每行读取文件为json对象。 chunksize: 返回JsonReader对象进行迭代。有关 请参阅行分隔的json docs。这只能在 文件将被一次读入内存。 在1.2版更改: compression: 用于对磁盘上的数据进行实时解压。 如果'infer'和'path_or_buf'是类似路径的, 那么检测以下扩展名的压缩:'.gz’, ‘.bz2’, ‘.zip’, ‘.xz’, 或 ‘.zst’(否则不压缩)。 如果使用'zip',则zip文件必须只包含一个要读入的数据文件。如果不解压, 请设置为None。也可以是一个字典, 键 其他键值对分别 或 例如,可以使用自定义压缩字典传递以下信息用于Zstandard解压缩:
在1.4.0版更改:Zstandard支持。 nrows: 必须从以行分隔的jsonfile中读取的行数。这只能在lines=True时传递。 如果为None,则返回所有行。 1.1新版功能。 storage_options: 对于特定存储连接有意义的额外选项,例如主机、端口、用户名、密码等。 对于HTTP(S) url,键值对作为头选项转发到 对于其他url(例如以"s3://"和"gcs://"开头)键值对被转发到 请参阅 1.2.0新版功能。 |
返回: |
返回的类型取决于 |
Notes
特定于orient='table'
,如果使用to_json()
写入一个索引名为Index的文本DataFrame,后续的读取操作将错误地将索引名称设置为None
。这是因为DataFrame.to_json()也使用index来表示缺失的index名称,而后续的read_json()操作无法区分两者。MultiIndex和任何以'level_'
开头的名称也会遇到相同的限制。
例如,
>>> df = pd.DataFrame([['a', 'b'], ['c', 'd']],
index=['row 1', 'row 2'],
columns=['col 1'
使用'split'
格式的JSON编码/解码Dataframe:
>>> df.to_json(orient='split')
'{"columns":["col 1","col 2"],"index":["row 1","row 2"],"data":[["a","b"],["c","d"]]}'
>>> pd.read_json(_, orient='split')
col 1 col 2
row 1 a b
row 2 c d
使用'index'
格式的JSON编码/解码Dataframe:
>>> df.to_json(orient='index')
'{"row 1":{"col 1":"a","col 2":"b"},"row 2":{"col 1":"c","col 2":"d"}}'
>>> pd.read_json(_, orient='index')
col 1 col 2
row 1 a b
row 2 c d
使用'records'
格式的JSON编码/解码Dataframe。注意,索引标签不保留这种编码。
>>> df.to_json(orient='records')
'[{"col 1":"a","col 2":"b"},{"col 1":"c","col 2":"d"}]'
>>> pd.read_json(_, 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"}]}'