Garfield
YZF Admin
İçe aktarma sırasında dosyanın gerçek karakter kodlamasını
Kodlama, metin karakterlerinin dosyada bayt olarak nasıl saklandığını belirler.
Aşağıdaki örnek varsayımsaldır.
Okul, ad veya şehir adları doğru görünüyorsa okuma işlemi başarılıdır. Örneğin
Aşağıdaki tablo, seçim yaparken hangi durumda hangi değeri denemenin anlamlı olduğunu gösterir.
Tablodaki seçenekler birbirinin eş anlamlısı değildir. Özellikle
Bir veri çerçevesini başka bir programa gönderecekseniz çıkış kodlamasını açıkça belirtin:
Burada
Metinler
encoding parametresiyle belirtin; dışa aktarırken de hedef programın beklediği kodlamayı seçin. Türkçe metinlerde çoğu durumda utf-8, Excel ile uyumluluk gereken CSV dosyalarında ise utf-8-sig kullanılır. Hatalı kodlama seçimi bozuk karakterlere veya UnicodeDecodeError hatasına yol açar.Kodlama seçimi nasıl yapılır?
Kodlama, metin karakterlerinin dosyada bayt olarak nasıl saklandığını belirler.
ç, ğ, İ ve ş gibi karakterlerin doğru okunabilmesi için dosyayı yazan uygulamanın kullandığı kodlamayı bilmeniz gerekir. Kodlamayı tahmin etmek yerine mümkünse dosyayı oluşturan sistemin ayarından doğrulayın.Aşağıdaki örnek varsayımsaldır.
veriler.csv dosyasının UTF-8 kodlamasında ve virgülle ayrılmış olduğunu kabul eder:
Python:
import pandas as pd
df = pd.read_csv("veriler.csv", encoding="utf-8")
print(df.head())
Okul, ad veya şehir adları doğru görünüyorsa okuma işlemi başarılıdır. Örneğin
Çağrı değeri ÇaÄŸrı gibi görünüyorsa veri genellikle yanlış kodlamayla okunmuştur; bu durum dosyanın UTF-8 olmadığı veya UTF-8 verinin başka bir kodlama gibi yorumlandığı anlamına gelebilir.CSV dosyasını okuma
- Dosyanın kodlamasını belirleyin. Dosyayı oluşturan uygulamada veya veri sağlayıcısının açıklamasında
UTF-8,UTF-8 BOM,Windows-1254ya da başka bir kodlama yazıp yazmadığını kontrol edin. Dosyanın yalnızca uzantısı kodlamayı göstermez. - Kodlamayı
read_csv()çağrısına ekleyin. Bilinen kodlamayıencodingparametresine verin; örneğinpd.read_csv("veriler.csv", encoding="cp1254").cp1254, Windows Türkçe dosyalarında karşılaşılabilen bir seçenektir; dosya gerçekten bu kodlamadaysa kullanılmalıdır. - Metin sütunlarını kontrol edin.
print(df.head())ve gerekirseprint(df["ad"].head())ile Türkçe karakterlerin doğru göründüğünü doğrulayın. Dosya okunmuş olsa bile karakterler bozuksa işlem başarılı kabul edilmez.
encoding_errors="replace" veya encoding_errors="ignore" dosyanın açılmasını sağlayabilir; ancak hatalı ya da kaybolmuş karakterleri gizleyebileceği için veri temizleme ve kalıcı aktarım için ilk tercih olmamalıdır.Yaygın kodlamalar arasındaki fark
Aşağıdaki tablo, seçim yaparken hangi durumda hangi değeri denemenin anlamlı olduğunu gösterir.
| Kodlama | Ne zaman kullanılır? | Dikkat edilmesi gereken |
|---|---|---|
| utf-8 | Yeni sistemler ve genel amaçlı metin dosyaları | Dosya farklı bir kodlamadaysa okuma hatası verebilir |
| utf-8-sig | UTF-8 verinin Excel gibi uygulamalarda daha uyumlu açılması gerektiğinde | BOM adı verilen başlangıç işaretini işler |
| cp1254 | Bazı eski Windows Türkçe dosyaları | Dosyanın gerçekten bu kodlamada olduğu doğrulanmalıdır |
| latin1 | Teknik olarak her baytı eşleyerek dosyayı açma ihtiyacı olduğunda | Türkçe karakterleri doğru çözeceği garanti değildir |
latin1 ile dosyanın hatasız açılması, karakterlerin doğru çözüldüğünü kanıtlamaz. Bu yöntem yalnızca her baytı bir karaktere dönüştürür ve bozuk metni fark etmeyi zorlaştırabilir.CSV dosyasını doğru kodlamayla kaydetme
Bir veri çerçevesini başka bir programa gönderecekseniz çıkış kodlamasını açıkça belirtin:
Python:
import pandas as pd
df = pd.DataFrame({"şehir": ["İstanbul", "Çağrı"]})
df.to_csv("cikti.csv", index=False, encoding="utf-8-sig")
Burada
index=False ek bir sıra numarası sütununun yazılmasını önler. utf-8-sig ise özellikle CSV dosyasını Excel ile açacak kişiler için tercih edilebilir. Dosya bir API, Linux komutu veya başka bir Python uygulamasına aktarılacaksa hedef sistemin beklentisi utf-8 olabilir; bu nedenle kaydetme kodlamasını alıcı uygulamaya göre seçin.Hata mesajının anlamı
UnicodeDecodeError alırsanız pandas, seçtiğiniz kodlamayla dosyadaki en az bir baytı metne çevirememiştir. Önce read_csv() çağrısında kullandığınız kodlamayı ve dosyanın kaynağını karşılaştırın. Dosya Windows’tan geliyorsa cp1254 olasılığını, dosya yeni bir uygulamadan dışa aktarıldıysa utf-8 olasılığını değerlendirin; fakat sonucu Türkçe karakterleri gözle kontrol ederek doğrulayın.Metinler
ö, ÄŸ veya benzeri biçimde görünüyorsa veri çoğunlukla bir aşamada yanlış kodlamayla çözülmüş ya da yeniden kaydedilmiştir. Sadece encoding_errors="ignore" kullanarak sorunu kapatmayın; özgün dosyaya dönüp doğru kodlamayla yeniden okuyun ve ardından örnek satırları karşılaştırın.Excel dosyalarında durum
.xlsx dosyalarında metin kodlamasını genellikle CSV’deki gibi encoding parametresiyle seçmezsiniz; pandas, Excel dosyasının kendi yapısından metni okur. Kodlama sorunu çoğunlukla Excel’den CSV olarak dışa aktarma veya CSV’yi Excel’de açma aşamasında ortaya çıkar. Bu nedenle sorunlu dosyanın gerçekten .xlsx mi yoksa CSV mi olduğunu önce ayırın; CSV ise read_csv() ve to_csv() içinde kodlamayı açıkça yönetin.