Python Data Handling

‘int64’ Türünde Nesne JSON Dönüştürülemiyor Hatasını Nasıl Düzeltilir

Spread the love

“TypeError: Object of type ‘int64’ is not JSON serializable” hatası, Python’da Pandas ve NumPy gibi kütüphanelerle çalışırken sıklıkla ortaya çıkar. Bunun nedeni, JSON’ın doğal olarak NumPy’nin `int64` veri türünü desteklememesidir. Bu kılavuz, bu sorunu çözmek için çözümler sunmaktadır.

İçindekiler

`int64`’ü Standart Python Türlerine Dönüştürme

`int64` değerlerini standart Python tamsayılarına (`int`) veya kayan noktalı sayılara (`float`) dönüştürmek en yaygın ve genellikle tercih edilen çözümdür. Bu, sayısal verileri korurken JSON uyumluluğunu sağlar.

Pandas Örneği:


import pandas as pd
import json

data = {'col1': [1, 2, 3, 4, 5, 2**63]}  # Büyük bir sayı içeriyor
df = pd.DataFrame(data)

# int'e dönüştür (büyük sayılar için OverflowError oluşturacaktır)
try:
    df['col1'] = df['col1'].astype(int)
    json_data = json.dumps(df.to_dict('records'))
    print(f"Tamsayı dönüşümü: {json_data}")
except OverflowError:
    print("Integer dönüşümü sırasında OverflowError oluştu.")

# float'a dönüştür (büyük sayıları işler)
df['col1'] = df['col1'].astype(float)
json_data = json.dumps(df.to_dict('records'))
print(f"Float dönüşümü: {json_data}")

NumPy Örneği:


import numpy as np
import json

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

# int'e dönüştür (büyük sayılar için OverflowError oluşturacaktır)
try:
    arr = arr.astype(int)
    json_data = json.dumps(arr.tolist())
    print(f"Tamsayı dönüşümü: {json_data}")
except OverflowError:
    print("Integer dönüşümü sırasında OverflowError oluştu.")

# float'a dönüştür (büyük sayıları işler)
arr = arr.astype(float)
json_data = json.dumps(arr.tolist())
print(f"Float dönüşümü: {json_data}")

Potansiyel Olarak Büyük Sayılarla Başa Çıkma

`int64` değerleriniz standart bir Python tamsayısının temsil edebileceği maksimum değeri aşabilirse, `OverflowError`’ı önlemek için `float`’a dönüştürmek şarttır. Float’lar çok daha geniş bir sayısal değer aralığını işleyebilir.

`int64`’ü Metinlere Dönüştürme

Serileştirmeden sonra veriler üzerinde matematiksel işlem yapmanız gerekmiyorsa, metne dönüştürmek basit bir alternatiftir. Bu, olası taşma sorunlarını önleyen sağlam bir yaklaşımdır.


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)

Veri Serileştirme İçin En İyi Uygulamalar

Daha temiz kod ve daha kolay bakım için, serileştirmeden önce veri türlerini tutarlı bir şekilde işleyin. Veri yapılarınız karmaşıksa, özel bir serileştirme kütüphanesi kullanmayı düşünün. Özel uygulamanızın gereksinimlerine göre uygun dönüştürme yöntemini (int, float veya metin) her zaman dikkatlice seçin.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir