Ana içeriğe geç

PySpark: Bir DataFrame'den Sütun Nasıl Kaldırılır

PySpark'ta, bir DataFrame'den bir veya birden fazla sütunu tek bir sütun için .drop("column_name") yöntemiyle, birden fazla sütun için ise .drop(["column1", "column2", ...]) ile kaldırabiliriz.
· 6 dk. oku

Yapay Zeka ile Keşfedin

Veri temizleme ve hazırlama, her veri bilimi veya veri mühendisliği projesinde kritik adımlardır. Verilerimizin kalitesini ve güvenilirliğini sağlamak için tutarsızlıkları, hataları ve eksik değerleri belirleyip ele almamız gerekir.

PySpark, büyük veri kümeleriyle çalışırken özellikle kullanışlıdır çünkü veri setimizi temizlemek için verimli yöntemler sunar. Bu yazıda, yaygın bir temizlik görevine odaklanacağız: PySpark’ın .drop() ve .select() yöntemlerini kullanarak bir DataFrame’den sütunları nasıl kaldıracağımız.

PySpark hakkında daha fazla bilgi edinmek için şu kursa göz atın: Introduction to PySpark.

 

PySpark DataFrame'lerinde Neden Sütun Kaldırılır?

Sütun kaldırma, çeşitli nedenlerle veri ön işleme sürecinde yaygın bir görevdir. Gereksiz veya alakasız sütunları kaldırmak, işlememiz gereken veri miktarını önemli ölçüde azaltabilir. Bu, veri setimizi sadeleştirir, analiz etmeyi kolaylaştırır ve PySpark işlerinin performansını potansiyel olarak iyileştirir.

Ayrıca, makine öğrenimi modelleri için veri hazırlarken, özellik seçimi genellikle modele katkı sağlamayan veya gürültü katabilecek sütunların kaldırılmasını içerir. Bu adım daha verimli ve etkili modellere yol açabilir.

Son olarak, sütun kaldırma, veri kalitesini artırmak için bir strateji olabilir. Bir sütun yüksek oranda eksik değer veya hatalı veri içeriyorsa, onu kaldırmak en doğru adım olabilir.

PySpark DataFrame'inden Tek Bir Sütun Nasıl Kaldırılır

Beş sütundan oluşan bir df DataFrame'imiz olduğunu varsayalım: player_name, player_position, team, minutes_played ve score. minutes_played sütununda çok sayıda eksik değer var, bu yüzden onu kaldırmak istiyoruz.

PySpark'ta, bir DataFrame'den tek bir sütunu .drop() yöntemiyle kaldırabiliriz.

Sözdizimi df.drop("column_name") şeklindedir; burada:

  • df, sütunu kaldırmak istediğimiz DataFrame'dir
  • column_name, kaldırılacak sütunun adıdır.

df.drop() yöntemi, belirtilen sütunları kaldırılmış yeni bir DataFrame döndürür.

Bir sütunu şu şekilde kaldırabiliriz:

df_dropped = df.drop("minutes_played")

PySpark DataFrame'inden Birden Fazla Sütun Nasıl Kaldırılır

Diyelim ki df DataFrame'imizi analiz etmek istiyoruz ancak takım bilgisini veya oyuncunun pozisyonunu dikkate almak istemiyoruz—yani her iki sütunu da kaldırmak istiyoruz. Bunu yapmanın birden fazla yolu var; seçeneklerimizi inceleyelim.

Bir PySpark DataFrame'inden birden fazla sütunu kaldırmak için sütun adlarının bir listesini .drop() yöntemine iletebiliriz. Bunu iki şekilde yapabiliriz:

# Seçenek 1: İsimleri liste olarak geçmek
df_dropped = df.drop(["team", "player_position"])

# Seçenek 2: İsimleri ayrı argümanlar olarak geçmek
df_dropped = df.drop("team", "player_position")

Alternatif olarak, birden fazla .drop() çağrısını zincirleyebiliriz. Teknik olarak çalışsa da genellikle en verimli veya şık yaklaşım olarak kabul edilmez. Her çağrı yeni bir DataFrame oluşturur; bu da özellikle daha büyük veri kümeleriyle çalışırken ek yük getirebilir.

df_dropped = df.drop("team").drop("player_position")

Koşullu Olarak Sütun Kaldırma

Hangi sütunları kaldıracağımızı belirtmek yerine, yöntemi tersine çevirip yalnızca belirli bir koşulu veya gereksinimi karşılayanları seçebiliriz. Bu şekilde dönen DataFrame artık istenmeyen sütunları içermez. 

.select() kullanma

PySpark'ta .select() yöntemini, belirli ölçütlere göre bir veya daha fazla sütunu kaldırmak için bir liste üreteciyle birlikte kullanabiliriz. Yöntem esnektir; basit bir koşuldan karmaşık birine kadar kullanılabilir. 

Bu yöntem df.select([col for col in df.columns if condition]) sözdizimini izler; burada:

  • df, üzerinde çalıştığınız DataFrame'dir.
  • condition, tutmak istediğiniz sütunları filtrelemek için kullanılan ölçüttür.

Yeniden df DataFrame'imizle çalışalım ve team sütunu dışında tüm sütunları seçelim:

df_sel = df.select([col for col in df.columns if col != "team"])

.selectExpr() ile karmaşık koşullar

Eğer SQL ile rahat isek ve sütunları filtrelerken daha karmaşık koşullar uygulamamız gerekiyorsa, PySpark'ın .selectExpr() yöntemi güçlü bir çözüm sunar. SQL benzeri ifadeleri doğrudan PySpark kodumuz içinde kullanarak sütunları seçmemize ve dönüştürmemize olanak tanır.

Örneğin, şu örneği ele alalım:

# Belirli sütunları seçin ve yeni bir 'FullMatch' sütunu oluşturun
df_sel = df.selectExpr("player_name", "player_position", "minutes_played >= 60 as FullMatch")

Burada yalnızca bir sütunu hariç tutmuyoruz. Şunları yapıyoruz:

  1. player_name ve player_position sütunlarını seçiyoruz.
  2. Bir oyuncunun tam maç oynayıp oynamadığını (60 dakika veya daha fazla) belirten FullMatch adlı yeni bir sütun oluşturuyoruz.

Bu esneklik, basit liste üreteçlerinin yeterli olmayabileceği durumlarda .selectExpr() yöntemini çok değerli kılar.

En İyi Uygulamalar

DataFrame'imizden sütun kaldırmaya karar verirken, veri bütünlüğünü, kod okunabilirliğini ve verimliliği korumak için bazı en iyi uygulamaları izlemek önemlidir.

1. Verilerinizi yedekleyin: Özellikle sütunları kaldırırken, DataFrame'inizde herhangi bir değişiklik yapmadan önce bir yedek kopya oluşturmak akıllıcadır. Bu, gerekirse orijinal veriye geri dönebilmenizi sağlar.

df_backup = df.persist()  # DataFrame'i daha sonra yeniden hesaplamamak için önbelleğe alın

2. inplace=False (varsayılan) ile kaldırın: Varsayılan olarak, .drop() yöntemi orijinali değiştirmeden yeni bir DataFrame döndürür. Bu genelde daha güvenlidir. Orijinal DataFrame'i değiştirmek istediğinizden tamamen eminseniz inplace=True kullanabilirsiniz, ancak dikkatli olun.

df_dropped = df.drop("column_to_drop", inplace=False) # Varsayılan davranış

3. Kararlarınızı belgeleyin: Ortak bir projede çalışıyorsanız veya gelecekte kodunuza geri dönmeyi düşünüyorsanız, belirli sütunları neden kaldırmayı seçtiğinizi açıklayan yorumlar eklemek faydalıdır. Bu dokümantasyon, size ve başkalarına değerli bağlam sağlayabilir.

4. Sütunları yeniden adlandırmayı düşünün: Sütunları kaldırmak yerine, özellikle içerdiği bilgiler gelecekteki analizler için değerli olabilecekse, onları yeniden adlandırmanın daha uygun olup olmayacağını değerlendirmeliyiz. PySpark, sütunları yeniden adlandırmamıza yardımcı olan .withColumnRenamed() yöntemini sağlar.

Sonuç

Bu eğitimde, .drop() ve .select() yöntemlerini kullanarak tekli ve çoklu sütunların nasıl kaldırılacağını öğrendik. Ayrıca, daha karmaşık seçim tekniklerine ihtiyaç duyarsak SQL ifadelerinden yararlanmak için alternatif yöntemleri de açıkladık.

Becerilerinizi geliştirmek ve PySpark'ın güçlü tekniklerinden yararlanmak istiyorsanız, şu kurs ve materyallere göz atmayı düşünebilirsiniz: 

SSS

PySpark'ta regex'e göre sütunları nasıl kaldırırım?

PySpark'ta regex desenine göre sütun kaldırmak için, sütun adlarını re modülünü (düzenli ifadeler) ve bir liste üretecini kullanarak filtreleyebilir, ardından filtrelenen listeyi .drop() yöntemine iletebilirsiniz.

PySpark'ta aynı ada sahip sütunları nasıl kaldırırım?

PySpark, bir DataFrame içinde yinelenen sütun adlarına izin vermez. Veri kaynağınızda yinelenen adlar varsa, muhtemelen DataFrame oluştururken hata alırsınız. En iyi uygulama, yinelenen adları kaynağında veya DataFrame oluşturma aşamasında çözmektir.

PySpark'ta yalnızca null değerler içeren sütunları nasıl kaldırırım?

Yalnızca null değerler içeren sütunları PySpark'ta kaldırmak için önce her sütundaki null sayısını count(when(col(c).isNull(), c)) ile hesaplayabiliriz. Ardından, null sayısının DataFrame'in toplam satır sayısına eşit olduğu sütunları belirleriz. Son olarak bu sütunları .drop() yöntemiyle kaldırırız.

PySpark'ta sütunları koşullu olarak nasıl kaldırırım?

df.select([col for col in df.columns if condition]) kullanın.

Maria Eugenia Inzaugarat

Yazar

Maria Eugenia Inzaugarat

Konular

İlgili