6.4 读取JSON文件
Pandas JSON读取全面指南:从基础到嵌套处理
本章节详细讲解如何使用Pandas读取JSON文件,包括基础读取方法、核心参数如orient和dtype的配置技巧,以及处理嵌套JSON文件的有效方法,适合Pandas新手快速上手。
读取JSON文件
简介
JSON(JavaScript Object Notation)是一种广泛使用的轻量级数据交换格式。在数据分析和处理中,Pandas 提供了强大的工具来读取和操作 JSON 数据。本章节将引导你从基础到进阶,学习如何使用 Pandas 读取 JSON 文件,包括核心参数的配置和处理嵌套结构的方法。
基础读取:pd.read_json
使用 pd.read_json() 函数可以轻松将 JSON 文件转换为 Pandas DataFrame。这是读取 JSON 的基本方法,适用于大多数简单场景。
基本语法:
import pandas as pd
# 读取本地 JSON 文件
df = pd.read_json('data.json')
print(df.head()) # 查看前几行数据
这个方法默认假设 JSON 数据是按行记录的列表(orient='records'),返回一个 DataFrame,你可以像处理其他 Pandas 数据一样进行分析和操作。
小贴士:如果 JSON 数据在字符串中,可以使用 pd.read_json('data.json') 或 pd.read_json(json_string),其中 json_string 是包含 JSON 数据的字符串。
核心参数配置
为了更灵活地处理不同格式的 JSON 数据,pd.read_json() 提供了多个参数。本节重点介绍两个核心参数:orient 和 dtype。
orient 参数
orient 参数定义了 JSON 数据的排列方向,影响如何将 JSON 转换为 DataFrame。常用选项包括:
'records'(默认):JSON 数据是一个字典列表,每个字典对应 DataFrame 的一行。适合大多数标准 JSON 文件。'index':JSON 数据的键被用作行索引。例如,{'row1': {'col1': 1, 'col2': 2}, 'row2': {'col1': 3, 'col2': 4}}。'columns':JSON 数据的键被用作列名。例如,{'col1': {'row1': 1, 'row2': 3}, 'col2': {'row1': 2, 'row2': 4}}。'split':JSON 数据是一个包含 'index'、'columns' 和 'data' 的字典,用于更精确的控制。
示例:
# 假设 JSON 数据为 {'0': {'name': 'Alice', 'age': 30}, '1': {'name': 'Bob', 'age': 25}}
df = pd.read_json('data.json', orient='index')
print(df) # 输出行索引为 '0' 和 '1'
正确配置 orient 参数可以避免数据解析错误,提高读取效率。
dtype 参数
dtype 参数允许你指定列的数据类型,用于优化内存使用或强制转换数据类型。这在处理大数据或确保数据一致性时非常有用。
示例:
df = pd.read_json('data.json', dtype={'age': 'int64', 'salary': 'float64', 'name': 'object'})
print(df.dtypes) # 查看数据类型
通过指定 dtype,你可以避免 Pandas 自动推断数据类型可能带来的性能问题或错误。
读取嵌套JSON文件的方法
嵌套 JSON 文件包含多层结构,例如字典中的字典或列表。处理这类数据时,需要展平结构以适合 DataFrame。Pandas 提供了 json_normalize 函数来简化这个过程。
使用 json_normalize 函数
首先,确保导入相关模块:
import json
import pandas as pd
from pandas import json_normalize
# 读取嵌套 JSON 文件
with open('nested_data.json', 'r') as f:
data = json.load(f) # 加载 JSON 数据为 Python 字典或列表
# 展平嵌套数据
df = json_normalize(data, 'users', ['meta', 'timestamp'])
# 参数解释:
# - 'users': 要展平的键路径(如果 data 是一个包含用户列表的字典)
# - ['meta', 'timestamp']: 要保留的元数据键
print(df.head())
如果 JSON 结构简单,可以直接用 pd.read_json() 配合 orient 参数处理。但对于复杂嵌套,json_normalize 更灵活。
示例:处理多层嵌套 JSON
假设 JSON 文件内容如下:
{
"company": "TechCorp",
"employees": [
{
"name": "Alice",
"details": {
"age": 30,
"department": "Engineering"
}
},
{
"name": "Bob",
"details": {
"age": 25,
"department": "Sales"
}
}
]
}
读取方法:
import pandas as pd
from pandas import json_normalize
import json
with open('nested_data.json', 'r') as f:
data = json.load(f)
# 展平 employees 列表,并包含 company 信息
df = json_normalize(data, 'employees', ['company'], sep='_')
print(df)
# 输出列:name, details_age, details_department, company
sep 参数用于分隔嵌套键名,使列名更清晰。
总结
通过本章节的学习,你应该掌握了:
- 使用
pd.read_json()基础读取 JSON 文件。 - 配置核心参数
orient和dtype以优化数据读取。 - 使用
json_normalize函数处理嵌套 JSON 结构,将其转换为扁平的 DataFrame。
实践是巩固知识的关键,建议尝试使用不同类型的 JSON 文件进行练习。随着熟练度的提高,你可以结合其他 Pandas 功能进行更复杂的数据处理。