Python Data Handling

Comment résoudre l’erreur TypeError : l’objet de type ‘int64’ n’est pas JSON serialisable

Spread the love

L’erreur « TypeError: Object of type ‘int64’ is not JSON serializable » survient fréquemment lors de l’utilisation de bibliothèques comme Pandas et NumPy en Python. Cela se produit parce que JSON ne supporte pas nativement le type de données NumPy `int64`. Ce guide présente des solutions pour résoudre ce problème.

Table des matières

Conversion de ‘int64’ en types Python standard

La solution la plus courante et souvent préférée consiste à convertir les valeurs `int64` en entiers Python standard (`int`) ou en nombres à virgule flottante (`float`). Cela préserve les données numériques tout en assurant la compatibilité JSON.

Exemple Pandas :


import pandas as pd
import json

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

# Conversion en int (provoquera une OverflowError pour les grands nombres)
try:
    df['col1'] = df['col1'].astype(int)
    json_data = json.dumps(df.to_dict('records'))
    print(f"Conversion en entier : {json_data}")
except OverflowError:
    print("OverflowError survenue lors de la conversion en entier.")

# Conversion en float (gère les grands nombres)
df['col1'] = df['col1'].astype(float)
json_data = json.dumps(df.to_dict('records'))
print(f"Conversion en float : {json_data}")

Exemple NumPy :


import numpy as np
import json

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

# Conversion en int (provoquera une OverflowError pour les grands nombres)
try:
    arr = arr.astype(int)
    json_data = json.dumps(arr.tolist())
    print(f"Conversion en entier : {json_data}")
except OverflowError:
    print("OverflowError survenue lors de la conversion en entier.")

# Conversion en float (gère les grands nombres)
arr = arr.astype(float)
json_data = json.dumps(arr.tolist())
print(f"Conversion en float : {json_data}")

Gestion des grands nombres

Si vos valeurs `int64` peuvent dépasser la valeur maximale représentable par un entier Python standard, la conversion en `float` est essentielle pour éviter `OverflowError`. Les nombres à virgule flottante peuvent gérer une gamme de valeurs numériques beaucoup plus large.

Conversion de ‘int64’ en chaînes de caractères

La conversion en chaînes de caractères est une alternative simple si vous n’avez pas besoin d’effectuer des opérations mathématiques sur les données après la sérialisation. Il s’agit d’une approche robuste qui évite les problèmes potentiels de dépassement de capacité.


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)

Bonnes pratiques pour la sérialisation des données

Pour un code plus propre et une maintenance plus facile, gérez systématiquement les types de données avant la sérialisation. Envisagez d’utiliser une bibliothèque de sérialisation dédiée si vos structures de données sont complexes. Choisissez toujours avec soin la méthode de conversion appropriée (int, float ou chaîne de caractères) en fonction des exigences de votre application spécifique.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *