Python Data Handling

Cómo solucionar el TypeError: Objeto de tipo ‘int64’ no es serializable en JSON

Spread the love

El error «TypeError: Object of type ‘int64’ is not JSON serializable» surge frecuentemente al trabajar con librerías como Pandas y NumPy en Python. Esto ocurre porque JSON no soporta inherentemente el tipo de dato `int64` de NumPy. Esta guía presenta soluciones para resolver este problema.

Tabla de Contenidos

Convirtiendo ‘int64’ a Tipos Estándar de Python

La solución más común y a menudo preferida es convertir los valores `int64` a enteros estándar de Python (`int`) o números de punto flotante (`float`). Esto preserva los datos numéricos mientras se asegura la compatibilidad con JSON.

Ejemplo con Pandas:


import pandas as pd
import json

data = {'col1': [1, 2, 3, 4, 5, 2**63]}  # Incluye un número grande
df = pd.DataFrame(data)

# Convertir a int (causará OverflowError para números grandes)
try:
    df['col1'] = df['col1'].astype(int)
    json_data = json.dumps(df.to_dict('records'))
    print(f"Conversión a entero: {json_data}")
except OverflowError:
    print("Ocurrió un OverflowError durante la conversión a entero.")

# Convertir a float (maneja números grandes)
df['col1'] = df['col1'].astype(float)
json_data = json.dumps(df.to_dict('records'))
print(f"Conversión a flotante: {json_data}")

Ejemplo con NumPy:


import numpy as np
import json

arr = np.array([1, 2, 3, 4, 5, 2**63], dtype=np.int64)

# Convertir a int (causará OverflowError para números grandes)
try:
    arr = arr.astype(int)
    json_data = json.dumps(arr.tolist())
    print(f"Conversión a entero: {json_data}")
except OverflowError:
    print("Ocurrió un OverflowError durante la conversión a entero.")

# Convertir a float (maneja números grandes)
arr = arr.astype(float)
json_data = json.dumps(arr.tolist())
print(f"Conversión a flotante: {json_data}")

Manejo de Números Potencialmente Grandes

Si sus valores `int64` pudieran exceder el valor máximo representable por un entero estándar de Python, convertir a `float` es esencial para prevenir `OverflowError`. Los flotantes pueden manejar un rango mucho más amplio de valores numéricos.

Convirtiendo ‘int64’ a Cadenas

Convertir a cadenas es una alternativa sencilla si no necesita realizar operaciones matemáticas en los datos después de la serialización. Este es un enfoque robusto que evita posibles problemas de desbordamiento.


import pandas as pd
import json

data = {'col1': [1, 2, 3, 4, 5, 2**63]}
df = pd.DataFrame(data)

df['col1'] = df['col1'].astype(str)
json_data = json.dumps(df.to_dict('records'))
print(json_data)

Mejores Prácticas para la Serialización de Datos

Para un código más limpio y un mantenimiento más fácil, maneje consistentemente los tipos de datos antes de la serialización. Considere usar una librería de serialización dedicada si sus estructuras de datos son complejas. Siempre seleccione cuidadosamente el método de conversión apropiado (int, float o string) según los requisitos específicos de su aplicación.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *