pd.read_csv() ile veri okurken yalnızca dosyanın açılıp açılmadığı değil, verinin sütunlara doğru ayrılıp ayrılmadığı, karakter kodlaması, eksik değerleri, sütun türleri, tarih alanları ve satır yapısı kontrol edilir. En güvenli yaklaşım önce küçük bir örnek okumak, ardından sütun adlarını ve türlerini incelemek, beklenmeyen sonuç varsa ayırıcı, kodlama ve tırnak ayarlarını düzeltmektir. Böylece dosya teknik olarak okunmuş olsa bile yanlış sütunlara bölünmüş veya yanlış türde yorumlanmış veriyi fark edebilirsiniz.
Önce okunan yolun gerçekten beklenen CSV dosyasını gösterdiğini ve ilk satırın sütun başlığı olup olmadığını kontrol edin. Dosyada başlık varsa
CSV dosyaları her zaman virgülle ayrılmaz; noktalı virgül, sekme veya başka bir ayırıcı kullanılabilir. Alan içinde ayırıcı geçtiğinde tırnak işaretleri ve kaçış karakterleri de satırın nasıl çözümleneceğini etkiler. Python’un CSV açıklamalarında ayırıcı, tırnak ve kaçış karakterlerinin dosya biçiminin temel parçaları olduğu belirtilir.
Türkçe karakterler bozuk görünüyorsa
Boş hücrelerin gerçekten eksik değer olarak mı, yoksa
Tarih sütunları için de yalnızca sütun adını değil, okuma sonrasındaki türü kontrol edin. Tarih alanı metin olarak kalmışsa tarih sıralaması kronolojik değil alfabetik yapılabilir.
Her satırın beklenen sayıda alana sahip olup olmadığı, dosyanın başında gereksiz açıklama satırı bulunup bulunmadığı ve dosyada kaç satır okunacağı da kontrol edilir.
Aşağıdaki tablo, sorun görüldüğünde hangi ayarın önce inceleneceğini ayırır.
Tablo yalnızca ayar adlarını gösterir; doğru değerler dosyanın gerçek biçiminden çıkarılmalıdır. Örneğin Excel’den noktalı virgülle dışa aktarılmış ve UTF-8 kodlanmış varsayımsal bir dosya için başlangıç okuması şöyle yapılabilir:
Dosyayı doğrudan büyük bir veri kümesi olarak kullanmadan önce aşağıdaki kontrolleri yapın:
Sorunun kaynağı dosya biçimindeyse kodu değiştirmeden önce CSV’nin ilk birkaç satırını düz metin olarak inceleyin. Orada kullanılan gerçek ayırıcıyı, başlık durumunu, tırnakları, kodlamayı ve eksik değer gösterimini belirledikten sonra yalnızca gerekli
Kontrol edilmesi gereken temel alanlar
Dosya kaynağı ve başlık satırı
Önce okunan yolun gerçekten beklenen CSV dosyasını gösterdiğini ve ilk satırın sütun başlığı olup olmadığını kontrol edin. Dosyada başlık varsa
header=0 veya varsayılan başlık çıkarımı kullanılabilir. Başlık yoksa header=None verin; gerekirse names=["Tarih", "Ürün", "Adet", "Tutar"] gibi dosyadaki alanlara uygun sütun adları belirtin. Aksi durumda ilk veri satırı sütun adı sayılarak kayıt sayısı eksik kalabilir.Ayırıcı, kodlama ve tırnak işaretleri
CSV dosyaları her zaman virgülle ayrılmaz; noktalı virgül, sekme veya başka bir ayırıcı kullanılabilir. Alan içinde ayırıcı geçtiğinde tırnak işaretleri ve kaçış karakterleri de satırın nasıl çözümleneceğini etkiler. Python’un CSV açıklamalarında ayırıcı, tırnak ve kaçış karakterlerinin dosya biçiminin temel parçaları olduğu belirtilir.
Türkçe karakterler bozuk görünüyorsa
encoding değerini, tüm veri tek sütunda görünüyorsa sep veya delimiter değerini, sütunlar beklenmedik biçimde bölünüyorsa quotechar ve escapechar değerlerini inceleyin.Eksik değerler ve sütun türleri
Boş hücrelerin gerçekten eksik değer olarak mı, yoksa
NA, N/A, - veya boş metin olarak mı tutulduğu kontrol edilmelidir. Sayısal görünen bir sütunun metin olarak okunması; ondalık ayırıcı, binlik ayırıcı, para simgesi veya karışık değerlerden kaynaklanabilir.Tarih sütunları için de yalnızca sütun adını değil, okuma sonrasındaki türü kontrol edin. Tarih alanı metin olarak kalmışsa tarih sıralaması kronolojik değil alfabetik yapılabilir.
parse_dates kullanmak dönüşüm için yardımcı olur, ancak hatalı veya farklı biçimlerdeki tarihleri otomatik olarak anlamlı bir tarihe dönüştürmez.Satır yapısı, dizin ve veri kapsamı
Her satırın beklenen sayıda alana sahip olup olmadığı, dosyanın başında gereksiz açıklama satırı bulunup bulunmadığı ve dosyada kaç satır okunacağı da kontrol edilir.
index_col ile bir sütun dizin yapılacaksa bunun gerçekten benzersiz veya anlamlı bir kimlik alanı olduğundan emin olun. usecols, nrows veya skiprows kullanılması verinin yalnızca bir bölümünü okur; bu ayarlar performans için yararlı olsa da sonuçta tüm dosyanın işlendiği anlamına gelmez.Aşağıdaki tablo, sorun görüldüğünde hangi ayarın önce inceleneceğini ayırır.
| Kontrol alanı | Belirti | İncelenecek ayar |
|---|---|---|
| Sütunlara ayırma | Tüm veri tek sütunda veya fazla sütunda görünür | sep, delimiter |
| Karakter kodlaması | Türkçe karakterler bozuk veya okuma hatası oluşur | encoding |
| Başlık | İlk kayıt kaybolur veya sütun adları yanlış olur | header, names |
| Eksik değer | Boş veya özel işaretli hücreler metin kalır | na_values, keep_default_na |
| Sütun türü | Sayısal veya tarih alanları metin olarak kalır | dtype, parse_dates |
| Satır biçimi | Bazı satırlarda alan sayısı farklıdır | Tırnak, ayırıcı ve hatalı satır ayarları |
Python:
import pandas as pd
veri = pd.read_csv(
"satislar.csv",
sep=";",
encoding="utf-8",
header=0,
parse_dates=["Tarih"],
na_values=["", "NA", "Yok"]
)
print(veri.head())
print(veri.columns.tolist())
print(veri.dtypes)
print(veri.isna().sum())
print(veri.shape)
Okuma sonucunu doğrulama sırası
Dosyayı doğrudan büyük bir veri kümesi olarak kullanmadan önce aşağıdaki kontrolleri yapın:
- Dosyayı küçük bir örnekle okuyun. Önce
nrows=5veyanrows=10kullanarak başlıkların ve ilk kayıtların beklediğiniz gibi görünüp görünmediğini kontrol edin. - Sütun adlarını inceleyin.
veri.columns.tolist()çıktısında gereksiz boşluk, yanlış karakter veya beklenmeyen tek sütun görünüyorsa başlık ya da ayırıcı ayarını düzeltin. - İlk satırları ve veri boyutunu kontrol edin.
veri.head()ile değerleri,veri.shapeile satır ve sütun sayısını karşılaştırın. Beklenenden tek sütun çıkması genellikle ayırıcının yanlış olduğunu gösterir. - Sütun türlerini doğrulayın.
veri.dtypesçıktısında miktar alanlarının sayısal, tarih alanlarının tarih türünde ve kimlik alanlarının gerekirse metin türünde olduğunu kontrol edin. - Eksik değerleri sayın.
veri.isna().sum()çıktısı, eksik değerlerin hangi sütunlarda toplandığını gösterir; ancak eksik görünmeyen boş metinler ayrıcaunique()veya filtreleme ile incelenmelidir. - Beklenmeyen sonucu kaynağıyla karşılaştırın. Satır sayısı, sütun sayısı veya örnek değerler kaynak dosyayla uyuşmuyorsa analiz yapmadan önce
sep,encoding,header,na_valuesve tarih ayarlarını yeniden değerlendirin.
Okunmuş olması doğru okunmuş olduğu anlamına gelmez
read_csv() hata vermeden bir tablo döndürse bile bu, verinin doğru yorumlandığını kanıtlamaz. Örneğin yanlış ayırıcı seçildiğinde dosya tek sütunlu bir tablo olarak başarıyla okunabilir; sayıların metin türünde olması da her zaman okuma hatası oluşturmaz. Bu nedenle en azından head(), columns, dtypes, shape ve eksik değer sayımlarını birlikte kontrol edin.Sorunun kaynağı dosya biçimindeyse kodu değiştirmeden önce CSV’nin ilk birkaç satırını düz metin olarak inceleyin. Orada kullanılan gerçek ayırıcıyı, başlık durumunu, tırnakları, kodlamayı ve eksik değer gösterimini belirledikten sonra yalnızca gerekli
read_csv() seçeneklerini ekleyin. Böylece yanlış okunan veriyi sonradan düzeltmeye çalışmak yerine hatayı veri içeriği okunurken yakalarsınız.
Son düzenleme: