Pandas JSON用法详解
在数据分析和处理中,
pandas 是一个强大的 Python 库,它提供了丰富的功能来处理 JSON 数据。下面将从读取、写入、处理 JSON 数据等方面详细介绍 pandas 对 JSON 的使用。1. 读取 JSON 数据
pandas 提供了 read_json() 函数来读取 JSON 文件或 JSON 字符串。读取 JSON 文件
import pandas as pd
# 从文件中读取 JSON 数据
df = pd.read_json('data.json')
print(df)
读取 JSON 字符串
import pandas as pd
# 定义一个 JSON 字符串
json_str = '[{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]'
df = pd.read_json(json_str)
print(df)
参数说明
orient:指定 JSON 数据的格式方向,常见的值有:'records':JSON 是一个记录列表,每个记录是一个字典,这是默认值。'index':JSON 的键是索引,值是列。'columns':JSON 的键是列,值是索引。'values':JSON 是一个二维数组,每一行是一个记录。
import pandas as pd
# 示例 JSON 数据
json_data = {
"index": ["row1", "row2"],
"columns": ["col1", "col2"],
"data": [[1, 2], [3, 4]]
}
# 使用 orient='split' 读取
df = pd.read_json(pd.io.json.dumps(json_data), orient='split')
print(df)
2. 写入 JSON 数据
pandas 的 DataFrame 对象提供了 to_json() 方法来将数据写入 JSON 格式。import pandas as pd
# 创建一个 DataFrame
data = {
'name': ['Alice', 'Bob'],
'age': [25, 30]
}
df = pd.DataFrame(data)
# 将 DataFrame 写入 JSON 文件
df.to_json('output.json', orient='records')
参数说明
orient:与read_json()中的orient参数类似,指定输出的 JSON 格式方向。indent:指定缩进的空格数,用于美化输出的 JSON 格式。
import pandas as pd
# 创建一个 DataFrame
data = {
'name': ['Alice', 'Bob'],
'age': [25, 30]
}
df = pd.DataFrame(data)
# 将 DataFrame 写入 JSON 文件,美化格式
df.to_json('output_pretty.json', orient='records', indent=4)
3. 处理嵌套 JSON 数据
当 JSON 数据包含嵌套结构时,可以使用
json_normalize() 函数将其扁平化。import pandas as pd
import json
# 示例嵌套 JSON 数据
json_str = '[{"name": "Alice", "info": {"city": "New York", "country": "USA"}}, {"name": "Bob", "info": {"city": "London", "country": "UK"}}]'
data = json.loads(json_str)
# 扁平化嵌套 JSON 数据
df = pd.json_normalize(data)
print(df)
参数说明
record_path:指定要展开的嵌套列表的路径。meta:指定要保留的元数据列。
import pandas as pd
import json
# 示例嵌套 JSON 数据
json_str = '{"students": [{"name": "Alice", "scores": [80, 90, 70]}, {"name": "Bob", "scores": [85, 95, 75]}]}'
data = json.loads(json_str)
# 展开 scores 列表
df = pd.json_normalize(data['students'], record_path='scores', meta='name')
print(df)
4. JSON 数据的筛选和转换
读取 JSON 数据后,可以使用
pandas 的各种方法对数据进行筛选和转换。import pandas as pd
# 示例 JSON 数据
json_str = '[{"name": "Alice", "age": 25}, {"name": "Bob", "age": 30}]'
df = pd.read_json(json_str)
# 筛选年龄大于 25 的记录
filtered_df = df[df['age'] > 25]
print(filtered_df)
# 对年龄列进行转换
df['age_plus_1'] = df['age'] + 1
print(df)
5. 处理复杂 JSON 结构
对于非常复杂的 JSON 结构,可能需要多次使用
json_normalize() 或结合其他方法进行处理。例如,当 JSON 数据中既有嵌套列表又有嵌套字典时,可以分步处理。import pandas as pd
import json
# 示例复杂 JSON 数据
json_str = '[{"name": "Alice", "courses": [{"course_name": "Math", "grades": [80, 90]}, {"course_name": "English", "grades": [70, 85]}]}, {"name": "Bob", "courses": [{"course_name": "Math", "grades": [85, 95]}, {"course_name": "English", "grades": [75, 80]}]}]'
data = json.loads(json_str)
# 第一步:展开 courses 列表
df1 = pd.json_normalize(data, record_path='courses', meta='name')
# 第二步:展开 grades 列表
df2 = pd.json_normalize(df1.to_dict(orient='records'), record_path='grades', meta=['name', 'course_name'])
print(df2)
通过以上方法,可以使用
pandas 高效地读取、写入和处理各种 JSON 数据。
浙公网安备 33010602011771号