Pandas 中文手册

6.4 读取JSON文件

Pandas JSON读取全面指南:从基础到嵌套处理

Pandas 中文手册

本章节详细讲解如何使用Pandas读取JSON文件,包括基础读取方法、核心参数如orient和dtype的配置技巧,以及处理嵌套JSON文件的有效方法,适合Pandas新手快速上手。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

读取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() 提供了多个参数。本节重点介绍两个核心参数:orientdtype

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 文件。
  • 配置核心参数 orientdtype 以优化数据读取。
  • 使用 json_normalize 函数处理嵌套 JSON 结构,将其转换为扁平的 DataFrame。

实践是巩固知识的关键,建议尝试使用不同类型的 JSON 文件进行练习。随着熟练度的提高,你可以结合其他 Pandas 功能进行更复杂的数据处理。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包