Leer y escribir archivos JSON en Python con Pandas

Los archivos JSON están muy extendidos debido a lo livianos y legibles que son. En este artículo, usaremos Python y Pandas para leer y escribir archivos JSON.

Introducción

Pandas es una de las bibliotecas de Python más utilizadas para el manejo y la visualización de datos. La biblioteca de pandas proporciona clases y funcionalidades que se pueden usar para leer, manipular y visualizar datos de manera eficiente, almacenados en una variedad de formatos de archivo.

En este artículo, leeremos y escribiremos archivos JSON usando Python y Pandas.

¿Qué es un archivo JSON?

Notación de objetos de JavaScript (JSON) es un formato de datos que almacena datos en un formato legible por humanos. Si bien técnicamente se puede usar para el almacenamiento, los archivos JSON se usan principalmente para la serialización y el intercambio de información entre un cliente y un servidor.

Aunque se derivó de JavaScript, es independiente de la plataforma y es un formato ampliamente difundido y utilizado, sobre todo en las API REST.

Crear un archivo JSON

Para crear archivos JSON a través de Python, los datos deben almacenarse de cierta manera. Hay múltiples formas de almacenar estos datos usando Python. Algunos de los métodos han sido discutidos en Este artículo.

Primero crearemos un archivo usando el núcleo de Python y luego lo leeremos y escribiremos a través de Pandas.

Creación de datos JSON a través de diccionarios anidados

En Python, para crear datos JSON, puede usar diccionarios anidados. Cada elemento dentro del diccionario externo corresponde a una columna en el archivo JSON.

La clave de cada elemento es el encabezado de la columna y el valor es otro diccionario que consta de filas en esa columna en particular. Vamos a crear un diccionario que pueda usarse para crear un archivo JSON que almacene un registro de pacientes ficticios:

1
2
3
4
5
6
patients = {
         "Name":{"0":"John","1":"Nick","2":"Ali","3":"Joseph"},
         "Gender":{"0":"Male","1":"Male","2":"Female","3":"Male"},
         "Nationality":{"0":"UK","1":"French","2":"USA","3":"Brazil"},
         "Age" :{"0":10,"1":25,"2":35,"3":29}
}

En el script anterior, el primer elemento corresponde a la columna Nombre. El valor del elemento consiste en un diccionario donde los elementos del diccionario representan filas. Las claves de los elementos del diccionario interno corresponden a los números de índice de las filas, donde los valores representan valores de fila.

Dado que puede ser un poco difícil de visualizar así, aquí hay una representación visual:

patients visualized

En la columna Nombre, el primer registro se almacena en el índice 0 donde el valor del registro es Juan, de manera similar, el valor almacenado en la segunda fila de la columna Nombre es Nick y así sucesivamente.

Creación de datos JSON a través de listas de diccionarios

Otra forma de crear datos JSON es a través de una lista de diccionarios. Cada elemento de la lista consta de un diccionario y cada diccionario representa una fila. Este enfoque es mucho más legible que usar diccionarios anidados.

Vamos a crear una lista que se pueda usar para crear un archivo JSON que almacene información sobre diferentes autos:

1
2
3
4
5
6
7
cars = [
    {"Name":"Honda", "Price": 10000, "Model":2005, "Power": 1300},
    {"Name":"Toyota", "Price": 12000, "Model":2010, "Power": 1600},
    {"Name":"Audi", "Price": 25000, "Model":2017, "Power": 1800},
    {"Name":"Ford", "Price": 28000, "Model":2009, "Power": 1200},
         
]

Cada elemento del diccionario corresponde a una fila en un archivo JSON. Por ejemplo, el primer elemento del primer diccionario almacena el valor Honda en la columna Nombre. De manera similar, el valor de la columna Precio en la primera fila será 10000 y así sucesivamente.

Escritura de datos en un archivo JSON mediante Python

Con nuestro diccionario anidado y una lista de diccionarios, podemos almacenar estos datos en un archivo JSON. Para lograr esto, usaremos el módulo json y el método dump():

1
2
3
4
5
6
import json
with open('E:/datasets/patients.json', 'w') as f:
    json.dump(patients, f)
    
with open('E:/datasets/cars.json', 'w') as f:
    json.dump(cars, f)  

Ahora, tenemos dos archivos JSON: patients.json y cars.json. El siguiente paso es leer estos archivos a través de la biblioteca de Pandas.

If you'd like to read more about Leer y escribir JSON en un archivo en Core Python, we've got you covered!

Leer archivos JSON con Pandas

Para leer un archivo JSON a través de Pandas, utilizaremos el método read_json() y le pasaremos la ruta al archivo que nos gustaría leer. El método devuelve un DataFrame de Pandas que almacena datos en forma de columnas y filas.

Aunque, primero, tendremos que instalar Pandas:

1
$ pip install pandas

Leer JSON desde archivos locales

El siguiente script lee el archivo patients.json desde un directorio del sistema local y almacena el resultado en el marco de datos patients_df. El encabezado del marco de datos se imprime a través del método head ():

1
2
3
import pandas as pd
patients_df = pd.read_json('E:/datasets/patients.json')
patients_df.head()

Ejecutar este código debería producir:\

patients dataframe

De manera similar, el siguiente script lee el archivo cars.json del sistema local y luego llama al método head() en cars_df para imprimir el encabezado:

1
2
cars_df = pd.read_json('E:/datasets/cars.json')
cars_df.head()

Ejecutar este código debería producir:
cars dataframe

Leer JSON desde archivos remotos

El método read_json() no se limita solo a leer archivos locales. También puede leer archivos JSON ubicados en servidores remotos. Solo tiene que pasar la ruta del archivo JSON remoto a la llamada de función.

Leamos e imprimamos el encabezado del Iris Dataset, un conjunto de datos muy popular que contiene información sobre varias flores de Iris:

1
2
3
import pandas as pd
iris_data = pd.read_json("https://raw.githubusercontent.com/domoritz/maps/master/data/iris.json")
iris_data.head()

Ejecutar este código debería darnos:\

iris plant dataframe

Escritura de archivos de datos JSON a través de Pandas

Para convertir un dataframe de Pandas en un archivo JSON, usamos la función to_json() en el dataframe y pasamos la ruta al futuro archivo como parámetro.

Vamos a crear un archivo JSON a partir del conjunto de datos tips, que se incluye en la biblioteca Seaborn para la visualización de datos.

En primer lugar, instalemos Seaborn:

1
$ pip install seaborn

Luego, importémoslo y carguemos las sugerencias en un conjunto de datos:

1
2
3
4
import seaborn as sns

dataset = sns.load_dataset('tips')
dataset.head()

Así es como se ve el conjunto de datos:
tips dataset header

La función load_dataset() de Seaborn devuelve un DataFrame de Pandas, por lo que cargar el conjunto de datos de esta manera nos permite simplemente llamar a la función to_json() para convertirlo.

Una vez que hayamos obtenido el conjunto de datos, guardemos su contenido en un archivo JSON. Hemos configurado un directorio datasets para esto:

1
dataset.to_json('E:/datasets/tips.json')

Navegando al directorio E:/datasets, deberías ver tips.json. Al abrir el archivo, podemos ver JSON que corresponden a los registros en el marco de datos de Pandas que contiene el conjunto de datos consejos:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
{
   "total_bill":{
       "0":16.99,
       "1":10.34,
       "2":21.01,
       "3":23.68,
       "4":24.59,
       "5":25.29,
       ...
   }
   "tip":{
       "0":1.01,
       "1":1.66,
       "2":3.5,
       "3":3.31,
       "4":3.61,
       "5":4.71,
       ...
   }
   "sex":{
        "0":"Female",
        "1":"Male",
        "2":"Male",
        "3":"Male",
        "4":"Female",
        "5":"Male",
        ...
   }
    "smoker":{
        "0":"No",
        "1":"No",
        "2":"No",
        "3":"No",
        "4":"No",
        "5":"No",
        ...
    }
    ...

Conclusión

JSON es un formato ampliamente utilizado para el almacenamiento e intercambio de datos entre un cliente y un servidor. Los desarrolladores a menudo usan este formato en lugar de formatos como XML debido a lo liviano y legible que es.

En este artículo, hemos cubierto cómo leer y escribir archivos JSON utilizando la popular biblioteca Pandas de Python, desde archivos locales a archivos remotos.