Değerler veritabanında float olarak gözüküyor

Bu aralar çok soru soruyorum kusura bakmayın. Arkadaşlar sorum şu aşağıda gördüğünüz görsel şeklinde bir verim var.

Fakat Sql içerisine kaydedince bu şekilde noktalı olarak kaydediyor.

Capture

Sadece bu iki kolonda oluyor sorun. Kodum aşağıda. Nasıl düzeltebilirim?

import sqlite3
import pandas as pd

veri = pd.read_csv("Veriler.csv")
df = pd.DataFrame(veri)

firmalar = df["FIRMALAR"]
kullanicilar = df["KULLANICI"]
kodlar = df["KOD"]
sistemler = df["SISTEM"]
isverenler =df["ISVEREN"]
aracilar = df["ARACI"]

k=len(firmalar)

vt = sqlite3.connect("AyGrupDatabase.sqlite")
im = vt.cursor()
for index in range(0,k):
    im.execute("INSERT INTO firma_giris VALUES(?,?,?,?,?,?)", ((firmalar[index]),kullanicilar[index],kodlar[index],sistemler[index],isverenler[index],aracilar[index]))
    vt.commit()



(Kullanıcı ID’lerini ve/veya "kod"ları veritabanında sayı yerine string olarak saklamanız daha uygun olabilir ondan emin değilim beni aşıyor. Dolayısıyla bu gönderi tam bir yanıt olmayabilir.)

Sorununuzun kaynağı df'in içerisinde KULLANICI ve KOD sütunlarında eksik/kayıp (missing) veri olması olabilir. Zira normalde tamsayı olarak addettiğiniz sütunun içerisinde bir tane bile kayıp veri varsa o kayıp değerler NaN olarak değerlendiriliyor pandas tarafından. NaN da küsuratlı sayı kapsamında olduğundan tüm sütunun tip birliğini sağlamak adına pandas verinin tipini tümden float’a çeviriyor.

Yani

print(df.dtypes)

ve

print(df.KULLANICI.isna().sum())
print(df.KOD.isna().sum())

kodlarının sonucunu paylaşabilir misiniz? İlki sütunlarda tutulan verilerin tiplerini söylüyor, ikincisi de ilgili sütunlardaki kayıp veri sayısını belirtiyor.

Bunu "düzeltme"nin bir yolu pandas’a sonradan gelen nullable integer type’ı kullanmak olabilir (tekrar edeyim veritabanı uzmanı değilim, gönderinin ilk cümlesini tekrar ederim):

nullable_int_tipi = pd.Int64Dtype()
df = df.astype({"KULLANICI": nullable_int_tipi, "KOD": nullable_int_tipi})

‘DataFrame’ object has no attribute ‘types’ diye bir hata aldım. print(df.types) yazınca.

Doğrudur, df.dtypes yazmıştım aslında iki d ile.

1 Beğeni

Df.dtypes çıktısı:

SIRA           int64
FIRMALAR      object
KULLANICI    float64
KOD          float64
SISTEM        object
ISVEREN       object
ARACI         object

sanırım sorun burada float64 olarak görüyor.

0’dan farklılar mı?

1 1 diye iki çıktı verdi. Evet 0 değiller.

Tamamdır sorun düzeldi.