Dostlar, bugün başıma geleni anlatmazsam içimde kalır. Bir veri seti üzerinde çalışıyordum, her şey normaldi. Pandas ile read_csv'yi çağırdım, verileri DataFrame'e attım. İlk bakışta sorun yok gibiydi. Ta ki bir grafik çizmeye kalkana kadar. Tüm veri dağılımım anlamsız, sütunların yarısı NaN ile dolu! "Bu neyin nesi?" dedim, kafayı yiyecektim.
Önce kodu suçladım. "Acaba encoding mi bozuk?" diye encoding='utf-8''den latin-1'e kadar her şeyi denedim. Sonra ham CSV dosyasını açıp baktım. Meğerse sorun şuradaymış: Bir ürün açıklaması alanında, kullanıcı "Bu ürün, harika, kaliteli ve dayanıklıdır" gibi bir şey yazmış. Yani, alanın İÇİNDE fazladan virgül kullanmış!
Pandas, varsayılan olarak virgülü (,) ayraç olarak kabul ediyor. O satırı okurken, o masum görünen fazladan virgülü yeni bir sütunun başlangıcı zannedip tüm veri akışını bir sağa kaydırdı! Son sütundaki veriler de havada kaldı tabii.
Python:
# Kötü örnek satır:
# "123,Ürün Adı,"Bu ürün, harika",100"
# Pandas bunu 4 sütun sanar!
StackOverflow'da bile doğrudan bulamadığım çözüm aslında çok basitmiş. read_csv fonksiyonunun quotechar parametresi var. Metin içindeki ayraçları görmezden gelmesi için, metin alanlarını bir karakterle "tırnak içine al" diyorsun. Genelde çift tırnak (") kullanılır.
Python:
df = pd.read_csv('sikayetim_olan_dosya.csv', quotechar='"')
Bu küçük parametreyi ekleyince, Pandas tırnak içindeki her şeyi (içindeki virgüller de dahil) tek bir alan olarak okudu ve tüm sütun kayması düzeldi. Şaka gibi ama, 2 saatimi aldı bu saçmalık.
Siz de böyle CSV/veri okuma tuzağına düştünüz mü? Ya da bu quotechar işini daha otomatik halletmenin temiz bir yolu var mı? Ben artık tüm CSV'lerime şüpheyle bakıyorum.