Pandas pd.read_json() Función

Python math 模块Funciones comunes de Pandas


read_json()Es una función de la librería pandas que se utiliza para leer archivos JSON (JavaScript Object Notation) y admite la importación de datos en múltiples formatos JSON.

JSON es un formato ligero de intercambio de datos, fácil de leer y escribir para los humanos, y también fácil de analizar y generar para las máquinas. Se utiliza ampliamente en escenarios como Web APIs y archivos de configuración.read_json()Puede convertir datos JSON al formato DataFrame de pandas, lo que facilita el análisis de datos.


Sintaxis básica y parámetros

Formato de sintaxis

pandas.read_json(path_or_buf, orient=None, typ='frame', dtype=None,
                convert_axes=None, convert_dates=True, keep_default_dates=True,
                numpy=False, precise_float=False, date_unit='ms', ...)

Descripción de parámetros

ParámetroTipoDescripciónValor predeterminado
path_or_bufstr, path object o file-like objectRuta de archivo JSON, URL o cadenaObligatorio
orientstrFormato de los datos JSON: 'split', 'records', 'index', 'columns', 'values'None
typstrTipo de retorno: 'frame' devuelve DataFrame, 'series' devuelve Series'frame'
dtypedictEspecifica el tipo de datos de las columnasNone
convert_axesboolSi se convierte el eje a fecha y hora (datetime)None
convert_datesbool, listSi se convierten las columnas de fechasTrue
numpyboolSi se utilizan arrays de numpyFalse

Valor de retorno

  • Tipo de retorno:pd.DataFrameopd.Series
  • Por defecto, devuelve un DataFrame, que puede ser en forma de tabla bidimensional.
  • Cuandotyp='series'Cuando orient='series', devuelve Series.

Ejemplos

Mediante los siguientes ejemplos, domine completamenteread_json()los diversos usos de ...

Ejemplo 1: Leer datos JSON en diferentes formatos

Los datos JSON tienen múltiples formatos,read_json()admite los formatos más comunes.

Ejemplos

import pandas as pd
import json

# Datos de ejemplo: formato de array JSON (formato records)
json_records = '''
[
    {"name": "Tom", "age": 28, "city": "Beijing", "salary": 8000},
    {"name": "Jerry", "age": 35, "city": "Shanghai", "salary": 12000},
    {"name": "Mike", "age": 42, "city": "Guangzhou", "salary": 15000}
]
'''


# Escribir la cadena JSON en un archivo
with open('data_records.json', 'w', encoding='utf-8') as f:
    f.write(json_records)

# Leer el archivo JSON (formato records, el más común)
# orient='records' indica que cada fila es un objeto JSON
df_records = pd.read_json('data_records.json', orient='records')
print("Formato Records:")
print(df_records)
print()

# Datos de ejemplo: formato de objeto JSON (formato index)
json_index = '''
{
    "Tom": {"age": 28, "city": "Beijing", "salary": 8000},
    "Jerry": {"age": 35, "city": "Shanghai", "salary": 12000},
    "Mike": {"age": 42, "city": "Guangzhou", "salary": 15000}
}
'''


with open('data_index.json', 'w', encoding='utf-8') as f:
    f.write(json_index)

# Leer el archivo JSON (formato index, usando un campo como índice)
df_index = pd.read_json('data_index.json', orient='index')
print("Formato Index:")
print(df_index)
print()

# Datos de ejemplo: formato de columnas JSON (formato columns)
json_columns = '''
{
    "name": ["Tom", "Jerry", "Mike"],
    "age": [28, 35, 42],
    "city": ["Beijing", "Shanghai", "Guangzhou"],
    "salary": [8000, 12000, 15000]
}
'''


with open('data_columns.json', 'w', encoding='utf-8') as f:
    f.write(json_columns)

# Leer el archivo JSON (formato columns)
df_columns = pd.read_json('data_columns.json', orient='columns')
print("Formato Columns:")
print(df_columns)

Resultado esperado de la ejecución:

Records 格式:
    name  age       city  salary
0    Tom   28    Beijing    8000
1  Jerry   35   Shanghai   12000
2   Mike   42  Guangzhou   15000

Index 格式:
         age       city  salary
Tom       28    Beijing    8000
Jerry    35   Shanghai   12000
Mike     42  Guangzhou   15000

Columns 格式:
    name  age       city  salary
0    Tom   28    Beijing    8000
1  Jerry   参数          Shanghai   12000
2   Mike   42  Guangzhou   15000

Análisis del código:

  • orient='records': formato de array JSON, cada fila es un objeto JSON, es el formato más utilizado.
  • orient='index': formato de objeto JSON, las claves actúan como índice.
  • orient='columns': formato de columnas JSON, las claves son nombres de columnas y los valores son arrays.
  • Especificar correctamenteorientel parámetro es crucial para analizar correctamente los datos JSON.

Ejemplo 2: Leer JSON desde cadenas y URL

read_json()No solo puede leer archivos, sino que también admite la lectura de datos desde cadenas y URL.

Ejemplos

import pandas as pd
import json
from io import StringIO

# Ejemplo 2a: Leer desde una cadena JSON
json_string = '''
[
    {"product": "A", "sales": 100, "region": "North"},
    {"product": "B", "sales": 200, "region": "South"},
    {"product": "C", "sales": 150, "region": "East"}
]
'''


# Usar StringIO para convertir la cadena en un objeto de archivo
df_from_string = pd.read_json(StringIO(json_string))
print("Lectura desde cadena:")
print(df_from_string)
print()

# También se puede pasar la cadena JSON directamente en el parámetro
# Nota: Las cadenas de Python deben escaparse correctamente
json_str_direct = '[{"product": "A", "sales": 100}, {"product": "B", "sales": 200}]'
df_direct = pd.read_json(json_str_direct)
print("Pasar la cadena directamente:")
print(df_direct)
print()

# Ejemplo 2b: Leer el formato JSON Lines (un objeto JSON por línea)
# JSON Lines es un formato de registro (log) común
json_lines = '''{"name": "Tom", "score": 85}
{"name": "Jerry", "score": 92}
{"name": "Mike", "score": 78}
{"name": "Lucy", "score": 95}'''


with open('data_lines.json', 'w', encoding='utf-8') as f:
    f.write(json_lines)

# El formato JSON Lines requiere lectura línea por línea
# Se puede usar el parámetro lines=True (si el formato JSONL lo admite)
# O procesarlo manualmente
df_list = []
with open('data_lines.json', 'r', encoding='utf-8') as f:
    for line in f:
        df_list.append(json.loads(line))

df_lines = pd.DataFrame(df_list)
print("Lectura del formato JSON Lines:")
print(df_lines)
print()

# Ejemplo 2c: Leer desde una URL de API (requiere acceso a la red)
# Aquí se utiliza una API de ejemplo; al usarlo realmente, reemplácela por una URL real
# df_api = pd.read_json('https://api.example.com/data')
# print(df_api)
print("Nota: Leer desde una URL requiere una solicitud de red real")

Resultado esperado de la ejecución:

从字符串读取:
  product  sales region
0       A    100   North
1       B    200   South
2       C    150    East

直接传入字符串:
  product  sales
0       A    100
1       B    200

JSON Lines 格式读取:
    name  score
0    Tom     85
1  Jerry     92
2    Mike     78
3    Lucy     95

注意:从 URL 读取需要实际的网络请求

Análisis del código:

  • read_json()Puede aceptar cadenas JSON como entrada; useStringIOpara convertir la cadena en un objeto similar a un archivo.
  • El formato JSON Lines consiste en un objeto JSON independiente por línea, comúnmente utilizado en el procesamiento de registros (logs); es necesario leerlo línea por línea y luego combinarlo en un DataFrame.
  • Al leer desde una URL, basta con pasar la cadena de la URL directamente, pero se requiere soporte de red.

Ejemplo 3: Manejo de fechas y conversión de tipos

Las fechas y los tipos numéricos en los datos JSON requieren un manejo especial.

Ejemplos

import pandas as pd

# Ejemplo 3a: Manejo de campos de fecha
json_with_date = '''
[
    {"name": "Tom", "birthday": "1995-03-15", "join_date": "2020-01-10"},
    {"name": "Jerry", "birthday": "1988-07-22", "join_date": "2019-03-05"},
    {"name": "Mike", "birthday": "1981-11-30", "join_date": "2018-06-20"}
]
'''


with open('data_with_date.json', 'w', encoding='utf-8') as f:
    f.write(json_with_date)

# Por defecto, las cadenas de fecha se leen como tipo object
df_date = pd.read_json('data_with_date.json')
print("Lectura predeterminada (fechas como cadenas):")
print(df_date)
print("Tipo de birthday:", df_date['birthday'].dtype)
print()

# Usar convert_dates para convertir automáticamente las columnas de fecha
df_date_converted = pd.read_json('data_with_date.json', convert_dates=['birthday', 'join_date'])
print("Después de convertir las fechas:")
print(df_date_converted)
print("Tipo de birthday:", df_date_converted['birthday'].dtype)
print()

# Ejemplo 3b: Especificar tipos de datos
json_mixed = '''
[
    {"id": "1", "name": "Tom", "score": 85.5},
    {"id": "2", "name": "Jerry", "score": 92.0},
    {"id": "3", "name": "Mike", "score": 78.5}
]
'''


with open('data_mixed.json', 'w', encoding='utf-8') as f:
    f.write(json_mixed)

# Por defecto, id se lee como entero, name como cadena y score como número de punto flotante
df_mixed = pd.read_json('data_mixed.json')
print("Inferencia de tipos predeterminada:")
print(df_mixed)
print("Tipo de id:", df_mixed['id'].dtype)
print()

# Usar dtype para especificar los tipos explícitamente
df_typed = pd.read_json('data_mixed.json', dtype={'id': str, 'score': float})
print("Después de especificar los tipos:")
print(df_typed)
print("Tipo de id:", df_typed['id'].dtype)

Resultado esperado de la ejecución:

默认读取(日期为字符串):
    name    birthday    join_date
0    Tom  1995-03-15  2020-01-10
1  Jerry  1988-07-22  2019-03-05
2    Mike  1981-11-30  2018-06-20

默认读取(日期为字符串):
    name    birthday    join_date
0    汤    Tom  1995-03-15  pandas 的 to_json() 和 read_json() 的完整配对示例
1  Jerry  1988-07-22  2019-03-05
2    Mike  1981-11-30  确保 JSON 数据格式一致
    1981-配对    to_json(orient='records')  配对    read_json(orient='records')
3   Mike  1981-11-30  to_json(orient='records')
...
    join_date    2018-06-20

birthday 类型: object

转换日期后:
birthday 类型: datetime64[ns]

Análisis del código:

  • convert_datesEl parámetro puede especificar qué columnas deben convertirse al tipo de fecha.
  • De forma predeterminada,convert_dates=Truereconoce automáticamente los formatos de fecha comunes.
  • dtypeEl parámetro puede especificar explícitamente el tipo de datos de cada columna, evitando errores de inferencia de tipos.

Notas

  • Especificar correctamenteorientel parámetro es la clave para leer datos JSON; diferentes estructuras JSON requieren diferentes valores de orient.
  • Las fechas en JSON se leen por defecto como cadenas; es necesario usarconvert_datesel parámetro para convertirlas al tipo de fecha.
  • Al leer archivos JSON grandes, se puede considerar usarchunksizeel parámetro para lectura por bloques (chunks).
  • read_json()Admite la lectura desde rutas de archivo, URL y cadenas JSON.
  • El formato JSON Lines debe analizarse línea por línea y luego combinarse en un DataFrame.

Resumen

read_json()Es la función principal en pandas para leer datos JSON y admite múltiples formatos JSON. Como formato común de Web API e intercambio de datos, JSON se aplica ampliamente en el trabajo real de análisis de datos.

Dominarread_json()la clave es comprender los diferentesorientformatos, así como los métodos de manejo de fechas y tipos. Se recomienda a los lectores practicar más la lectura de datos JSON en diferentes formatos en su trabajo real.

Python math 模块Funciones comunes de Pandas

Otras extensiones