Python Data Handling

TypeError: Objekt vom Typ ‚int64‘ ist nicht JSON-serialisierbar beheben

Spread the love

Der Fehler „TypeError: Object of type ‚int64‘ is not JSON serializable“ tritt häufig bei der Arbeit mit Bibliotheken wie Pandas und NumPy in Python auf. Dies liegt daran, dass JSON den NumPy-Datentyp `int64` nicht standardmäßig unterstützt. Diese Anleitung zeigt Lösungen zur Behebung dieses Problems.

Inhaltsverzeichnis

Konvertierung von ‚int64‘ in Standard-Python-Typen

Die gängigste und oft bevorzugte Lösung ist die Konvertierung von `int64`-Werten in Standard-Python-Ganzzahlen (`int`) oder Gleitkommazahlen (`float`). Dies erhält die numerischen Daten und stellt gleichzeitig die JSON-Kompatibilität sicher.

Pandas-Beispiel:


import pandas as pd
import json

data = {'col1': [1, 2, 3, 4, 5, 2**63]}  # Enthält eine große Zahl
df = pd.DataFrame(data)

# Konvertierung in int (führt bei großen Zahlen zu OverflowError)
try:
    df['col1'] = df['col1'].astype(int)
    json_data = json.dumps(df.to_dict('records'))
    print(f"Integer-Konvertierung: {json_data}")
except OverflowError:
    print("OverflowError während der Integer-Konvertierung aufgetreten.")

# Konvertierung in float (verarbeitet große Zahlen)
df['col1'] = df['col1'].astype(float)
json_data = json.dumps(df.to_dict('records'))
print(f"Float-Konvertierung: {json_data}")

NumPy-Beispiel:


import numpy as np
import json

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

# Konvertierung in int (führt bei großen Zahlen zu OverflowError)
try:
    arr = arr.astype(int)
    json_data = json.dumps(arr.tolist())
    print(f"Integer-Konvertierung: {json_data}")
except OverflowError:
    print("OverflowError während der Integer-Konvertierung aufgetreten.")

# Konvertierung in float (verarbeitet große Zahlen)
arr = arr.astype(float)
json_data = json.dumps(arr.tolist())
print(f"Float-Konvertierung: {json_data}")

Handhabung potenziell großer Zahlen

Wenn Ihre `int64`-Werte den maximalen Wert übersteigen, der von einer Standard-Python-Ganzzahl darstellbar ist, ist die Konvertierung in `float` unerlässlich, um `OverflowError` zu vermeiden. Floats können einen viel größeren Bereich numerischer Werte verarbeiten.

Konvertierung von ‚int64‘ in Strings

Die Konvertierung in Strings ist eine einfache Alternative, wenn Sie nach der Serialisierung keine mathematischen Operationen mit den Daten durchführen müssen. Dies ist ein robuster Ansatz, der potenzielle Überlaufprobleme vermeidet.


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)

Best Practices für die Datenserialisierung

Für einen saubereren Code und einfachere Wartung sollten Datentypen vor der Serialisierung konsistent behandelt werden. Verwenden Sie eine dedizierte Serialisierungsbibliothek, wenn Ihre Datenstrukturen komplex sind. Wählen Sie immer die geeignete Konvertierungsmethode (int, float oder String) basierend auf den Anforderungen Ihrer spezifischen Anwendung.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert