İlk olarak hedef sütunu seçip dönüşüm sonucunu yeniden DataFrame’e atamalısınız; yalnızca
Beklenen veri görünümü şöyledir:
Bu sonuç, değerlerin sayısal biçime çevrildiğini gösterir; ancak değerlerin iş açısından doğru veya makul olduğunu kanıtlamaz. Örneğin
Bu işlemden sonra geçersiz iki değer
Buradaki
Tablodaki yöntemler birbirinin yerine her zaman kullanılamaz. Örneğin tarih metnini
Bu yöntem, sözlükteki sütunlardan birinde çevrilemeyen değer bulunursa hata verebilir. Dış kaynaktan gelen verilerde önce sorunlu sütunları
df["sütun"].astype(...) yazmak sütunun veri türünü kalıcı olarak değiştirmez. Sayısal değerler için astype, kirli veya eksik veriler için pd.to_numeric, tarihler için pd.to_datetime kullanılır. İşlemden sonra df.dtypes ile sonucu doğrulayabilirsiniz.Sütunun veri türünü doğrudan değiştirme
Varsayımsal olarak aşağıdaki DataFrame’deyas sütunu metinlerden oluşsun:
Python:
import pandas as pd
df = pd.DataFrame({
"ad": ["Ali", "Ayşe", "Mehmet"],
"yas": ["25", "31", "42"]
})
print(df.dtypes)
yas sütunu bu durumda genellikle object veya metin ağırlıklı bir tür olarak görünür. Sütunu tam sayıya çevirmek için dönüşüm sonucunu tekrar aynı sütuna atayın:- DataFrame’i hazırlayın.
pandaskütüphanesini içe aktarın ve dönüştürülecek sütunun gerçekten DataFrame içinde bulunduğundan emin olun. - Dönüşüm yöntemini seçin. Değerlerin tamamı geçerli sayılardan oluşuyorsa
astype("int64")veyaastype("float64")kullanabilirsiniz. - Sonucu sütuna atayın.
df["yas"] = df["yas"].astype("int64")kodunu çalıştırın; atama yapılmazsa DataFrame’in özgün türü değişmez. - Yeni türü kontrol edin.
df.dtypesveya yalnızca ilgili sütun içindf["yas"].dtypeçalıştırın. Beklenen sonuçint64gibi bir tam sayı türüdür.
Python:
df["yas"] = df["yas"].astype("int64")
print(df)
print(df["yas"].dtype)
Beklenen veri görünümü şöyledir:
Kod:
ad yas
0 Ali 25
1 Ayşe 31
2 Mehmet 42
int64
Bu sonuç, değerlerin sayısal biçime çevrildiğini gösterir; ancak değerlerin iş açısından doğru veya makul olduğunu kanıtlamaz. Örneğin
999 teknik olarak geçerli bir tam sayıdır fakat uygulamanız açısından hatalı olabilir.Kirli veya eksik değerleri dönüştürme
Sütunda"bilinmiyor", boş metin veya "1.250 TL" gibi sayıya doğrudan çevrilemeyen değerler varsa astype hata verebilir. Bu durumda önce pd.to_numeric kullanın. errors="coerce", çevrilemeyen değerleri NaN yapar; hatalı veriyi düzeltmez, yalnızca eksik değer olarak işaretler.
Python:
df = pd.DataFrame({
"puan": ["85", "90", "bilinmiyor", ""]
})
df["puan"] = pd.to_numeric(df["puan"], errors="coerce")
print(df)
print(df.dtypes)
Bu işlemden sonra geçersiz iki değer
NaN olur ve sütun çoğunlukla float64 türüne dönüşür. Tam sayı türünü korumak istiyorsanız pandas’ın eksik değer destekleyen Int64 türünü kullanabilirsiniz:
Python:
df["puan"] = pd.to_numeric(
df["puan"],
errors="coerce"
).astype("Int64")
Buradaki
Int64 ile int64 aynı değildir. Büyük I içeren Int64, eksik değerleri de taşıyabilen pandas türüdür. Dönüşümden sonra df["puan"].isna() ile hangi satırların çevrilemediğini bulup kaynak veriyi düzeltmeniz gerekir.Hangi dönüşüm yöntemini kullanmalısınız?
Yöntem seçimi, sütundaki değerlerin anlamına ve hatalı veriye nasıl davranmak istediğinize bağlıdır.| İhtiyaç | Yöntem | Önemli sonuç |
|---|---|---|
| Tamamı geçerli tam sayılar | astype("int64") | Geçersiz değer varsa hata verir |
| Geçerli veya kirli sayılar | _numeric(...) | errors="coerce" hatalı değerleri NaN yapar |
| Ondalıklı sayılar | astype("float64") | Ondalık kısmı korur |
| Tarih ve saat bilgisi | _datetime(...) | Geçersiz tarihleri NaT yapabilir |
| Tekrarlanan sınırlı metin değerleri | astype("category") | Kategori türü oluşturur; sayıya dönüştürmez |
astype("int64") ile çevirmek, metnin tarih olarak yorumlanmasını sağlamaz. Tarih için şu biçimi kullanın:
Python:
df["kayit_tarihi"] = pd.to_datetime(
df["kayit_tarihi"],
errors="coerce"
)
errors="coerce" kullanıldığında geçersiz tarihler NaT olur. Bu değerleri ayrıca incelemeden verinin tamamen doğru olduğu sonucuna varmayın.Birden fazla sütunun türünü değiştirme
Birden fazla sütunu tek seferde dönüştürmek içinastype içine sözlük verebilirsiniz:
Python:
df = df.astype({
"miktar": "float64",
"adet": "int64",
"urun_kodu": "string"
})
print(df.dtypes)
Bu yöntem, sözlükteki sütunlardan birinde çevrilemeyen değer bulunursa hata verebilir. Dış kaynaktan gelen verilerde önce sorunlu sütunları
pd.to_numeric veya pd.to_datetime ile kontrollü biçimde dönüştürmek, ardından df.dtypes ve eksik değer kontrolleriyle sonucu doğrulamak daha güvenlidir.