云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

Python神器Pandas 之 JSON(python json.parse)

jxf315 2025-03-18 23:18:43 教程文章 29 ℃

Pandas 提供了强大的方法来处理 JSON 格式的数据,支持从 JSON 文件或字符串中读取数据并将其转换为 DataFrame,以及将 DataFrame 转换回 JSON 格式。 使用Pandas加载JSON数据其实非常简单,直接使用`read_json`函数即可。不过,需要注意的是‘orient`参数,它可以根据JSON数据的组织方式选择不同的值。常见的选项有:`split`、`records`、`index`、`columns`和`values`。
此外,Pandas还提供了一个非常实用的方法`json_normalize`,可以灵活地加载不同格式的JSON数据。无论你的JSON数据是什么结构,这个方法都能帮你轻松搞定。

操作

方法

说明

从 JSON 文件/字符串读取数据

pd.read_json()

从 JSON 数据中读取并加载为 DataFrame

将 DataFrame 转换为 JSON

DataFrame.to_json()

将 DataFrame 转换为 JSON 格式的数据,可以指定结构化方式

支持 JSON 结构化方式

orient 参数

支持多种结构化方式,如 split、records、columns

pd.read_json() - 读取 JSON 数据

pd.read_json() 用于从 JSON 格式的数据中读取并加载为一个 DataFrame。它支持从 JSON 文件、JSON 字符串或 JSON 网址中加载数据。

语法格式:

import pandas as pd

df = pd.read_json(
    path_or_buffer,      # JSON 文件路径、JSON 字符串或 URL
    orient=None,         # JSON 数据的结构方式,默认是 'columns'
    dtype=None,          # 强制指定列的数据类型
    convert_axes=True,   # 是否转换行列索引
    convert_dates=True,  # 是否将日期解析为日期类型
    keep_default_na=True # 是否保留默认的缺失值标记
)

完整形式:

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)

参数说明:

参数

说明

默认值

path_or_buffer

JSON 文件的路径、JSON 字符串或 URL

必需参数

orient

定义 JSON 数据的格式方式。常见值有 split、records、index、columns、values。

None(根据文件自动推断)

dtype

强制指定列的数据类型

None

convert_axes

是否将轴转换为合适的数据类型

True

convert_dates

是否将日期解析为日期类型

True

keep_default_na

是否保留默认的缺失值标记(如 NaN)

True

常见的 orient 参数选项:

orient 值

JSON 格式示例

描述

split

{"index":["a","b"],"columns":["A","B"],"data":[[1,2],[3,4]]}

使用键 index、columns 和 data 结构

records

[{"A":1,"B":2},{"A":3,"B":4}]

每个记录是一个字典,表示一行数据

index

{"a":{"A":1,"B":2},"b":{"A":3,"B":4}}

使用索引为键,值为字典的方式

columns

{"A":{"a":1,"b":3},"B":{"a":2,"b":4}}

使用列名为键,值为字典的方式

values

[[1,2],[3,4]]

只返回数据,不包括索引和列名

从 JSON 文件加载数据:

实例

import pandas as pd
df = pd.read_json('data.json')
print(df.to_string())

to_string() 用于返回 DataFrame 类型的数据,我们也可以直接处理 JSON 字符串。

将 DataFrame 转换为 JSON

DataFrame.to_json() - 将 DataFrame 转换为 JSON 数据

to_json() 方法用于将 DataFrame 转换为 JSON 格式的数据,可以指定 JSON 的结构化方式。

语法格式:

df.to_json(
    path_or_buffer=None,    # 输出的文件路径或文件对象,如果是 None 则返回 JSON 字符串
    orient=None,            # JSON 格式方式,支持 'split', 'records', 'index', 'columns', 'values'
    date_format=None,       # 日期格式,支持 'epoch', 'iso'
    default_handler=None,   # 自定义非标准类型的处理函数
    lines=False,            # 是否将每行数据作为一行(适用于 'records' 或 'split')
    encoding='utf-8'        # 编码格式
)

完整形式:

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=True, indent=None, storage_options=None)[source]

参数说明:

参数

说明

默认值

path_or_buffer

输出的文件路径或文件对象,若为 None,则返回 JSON 字符串

None

orient

指定 JSON 格式结构,支持 split、records、index、columns、values

None(默认是 columns)

date_format

日期格式,支持 'epoch' 或 'iso' 格式

None

default_handler

自定义处理非标准类型(如 datetime 等)的处理函数

None

lines

是否将每行数据作为一行输出(适用于 records 或 split)

False

encoding

输出文件的编码格式

'utf-8'

实例

import pandas as pd

# 创建 DataFrame
df = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
})

# 将 DataFrame 转换为 JSON 字符串
json_str = df.to_json()
print(json_str)

将 DataFrame 转换为 JSON 文件(指定 orient='records'):

实例

import pandas as pd
# 创建 DataFrame
df
= pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
})
# 将 DataFrame 转换为 JSON 文件,指定 orient='records'
df.
to_json('data.json', orient='records', lines=True)
# 输出生成的文件内容:
# [
# {"Name":"Alice","Age":25,"City":"New York"},
# {"Name":"Bob","Age":30,"City":"Los Angeles"},
# {"Name":"Charlie","Age":35,"City":"Chicago"}
# ]

将 DataFrame 转换为 JSON 并指定日期格式:

实例

import pandas as pd
# 创建 DataFrame,包含日期数据
df
= pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie'],
'Date': pd.to_datetime(['2021-01-01', '2022-02-01', '2023-03-01']),
'Age': [25, 30, 35]
})
# 将 DataFrame 转换为 JSON,并指定日期格式为 'iso'
json_str
= df.to_json(date_format='iso')
print(json_str)

最近发表
标签列表