Takip et

Veri Tekrarlarından Arınma: Pandas drop_duplicates() Fonksiyonu

Veri Tekrarlarından Arınma: Pandas drop_duplicates() Fonksiyonu Veri analizi ve işleme süreçlerinde karşılaşılan en yaygın sorunlardan bi

Veri Tekrarlarından Arınma: Pandas drop_duplicates() Fonksiyonu

Veri analizi ve işleme süreçlerinde karşılaşılan en yaygın sorunlardan biri, veri setlerinde tekrar eden satırların veya değerlerin bulunmasıdır. Bu tekrarlar, analizlerin doğruluğunu olumsuz etkileyebilir, depolama alanını gereksiz yere artırabilir ve hesaplama maliyetlerini yükseltebilir. Pandas kütüphanesi, bu tür sorunları çözmek için güçlü ve esnek bir araç sunar: drop_duplicates() fonksiyonu. Bu rehberde, drop_duplicates() fonksiyonunun ne olduğunu, nasıl çalıştığını ve veri temizleme işlemlerinde nasıl etkin bir şekilde kullanılabileceğini detaylı bir şekilde inceleyeceğiz.

Veri Tekrarları Neden Bir Sorundur?

Tekrar eden veriler, genellikle veri girişi hataları, farklı kaynaklardan birleştirilen veriler veya sistemik aksaklıklar sonucunda ortaya çıkar. Bu tekrarların yol açtığı başlıca sorunlar şunlardır:

  • Yanlış Analizler: Örneğin, bir müşteri listesindeki tekrar eden kayıtlar, müşteri sayısını veya ortalama harcamayı yanlış hesaplamanıza neden olabilir.
  • Performans Düşüşü: Gereksiz büyük veri setleri, sorgu sürelerini uzatabilir ve işlemci/bellek kullanımını artırabilir.
  • Veri Tutarsızlığı: Aynı varlığa ait farklı bilgiler içeren tekrar eden kayıtlar, veri tutarlılığını bozar.

Pandas’ın drop_duplicates() fonksiyonu, bu sorunları ortadan kaldırmak için tasarlanmıştır ve veri setinizi daha temiz, daha doğru ve daha verimli hale getirmenize yardımcı olur.

drop_duplicates() Fonksiyonuna Derinlemesine Bakış

drop_duplicates() fonksiyonu, bir DataFrame veya Series üzerindeki tekrar eden satırları veya değerleri belirleyip kaldırmak için kullanılır. Varsayılan olarak, fonksiyon tüm sütunları dikkate alarak tam olarak aynı olan satırları bulur ve bu satırlardan yalnızca ilkini korur.

Temel Kullanım ve Varsayılan Davranış

Bir DataFrame üzerinde drop_duplicates() fonksiyonunu herhangi bir parametre belirtmeden çağırdığınızda, Pandas tüm sütunlardaki değerleri karşılaştırır. Eğer iki satırın tüm sütunlarındaki değerler birebir aynıysa, bu satırlar tekrar eden olarak kabul edilir. Pandas, varsayılan olarak bu tekrar eden satır grubundan ilk karşılaştığı satırı korur ve diğerlerini siler.

Örnek bir DataFrame oluşturalım:

import pandas as pd

data = {
    'Ad': ['Ali', 'Ayşe', 'Mehmet', 'Ali', 'Ayşe', 'Cem'],
    'Soyad': ['Can', 'Yılmaz', 'Demir', 'Can', 'Yılmaz', 'Ak'],
    'Yaş': [30, 25, 35, 30, 25, 28],
    'Şehir': ['Ankara', 'İstanbul', 'İzmir', 'Ankara', 'İstanbul', 'Bursa']
}
df = pd.DataFrame(data)
print("Orijinal DataFrame:")
print(df)

Çıktı:

Orijinal DataFrame:
       Ad   Soyad  Yaş     Şehir
0     Ali     Can   30    Ankara
1    Ayşe  Yılmaz   25  İstanbul
2  Mehmet   Demir   35     İzmir
3     Ali     Can   30    Ankara
4    Ayşe  Yılmaz   25  İstanbul
5     Cem      Ak   28     Bursa

Şimdi drop_duplicates() fonksiyonunu kullanalım:

df_temiz = df.drop_duplicates()
print("\nTekrarlardan Arındırılmış DataFrame (Varsayılan):")
print(df_temiz)

Çıktı:

Tekrarlardan Arındırılmış DataFrame (Varsayılan):
       Ad   Soyad  Yaş     Şehir
0     Ali     Can   30    Ankara
1    Ayşe  Yılmaz   25  İstanbul
2  Mehmet   Demir   35     İzmir
5     Cem      Ak   28     Bursa

Gördüğünüz gibi, (Ali, Can, 30, Ankara) ve (Ayşe, Yılmaz, 25, İstanbul) satırları tekrar ettiği için, bu satırların ilk örnekleri korunmuş, diğerleri silinmiştir.

drop_duplicates() Fonksiyonunun Önemli Parametreleri

drop_duplicates() fonksiyonu, davranışını özelleştirmek için birkaç önemli parametre sunar:

subset Parametresi: Belirli Sütunlara Göre Tekrar Edenleri Bulma

subset parametresi, tekrar eden satırları belirlemek için hangi sütunların dikkate alınacağını belirtmenizi sağlar. Bu, genellikle tüm satırın tamamen aynı olmaması, ancak belirli anahtar sütunlarda tekrar etmesi durumunda çok kullanışlıdır. subset, bir sütun adı (string) veya sütun adlarından oluşan bir liste (list of strings) olarak verilebilir.

Örneğin, sadece ‘Ad’ ve ‘Soyad’ sütunlarına göre tekrar edenleri silmek isteyelim:

df_subset = df.drop_duplicates(subset=['Ad', 'Soyad'])
print("\n'Ad' ve 'Soyad' sütunlarına göre tekrarlardan arındırılmış DataFrame:")
print(df_subset)

Çıktı:

'Ad' ve 'Soyad' sütunlarına göre tekrarlardan arındırılmış DataFrame:
       Ad   Soyad  Yaş     Şehir
0     Ali     Can   30    Ankara
1    Ayşe  Yılmaz   25  İstanbul
2  Mehmet   Demir   35     İzmir
5     Cem      Ak   28     Bursa

Bu örnekte, ‘Ali Can’ ve ‘Ayşe Yılmaz’ kombinasyonları tekrar ettiği için, diğer sütunlardaki değerler farklı olsa bile, bu kombinasyonların ilk örnekleri korunmuştur.

keep Parametresi: Hangi Tekrar Eden Kaydın Korunacağını Belirleme

keep parametresi, tekrar eden bir grup içinde hangi satırın korunacağını kontrol eder. Üç olası değeri vardır:

  • 'first' (Varsayılan): Tekrar eden gruptaki ilk gözlemi korur.
  • 'last': Tekrar eden gruptaki son gözlemi korur.
  • False: Tekrar eden gruptaki tüm gözlemleri siler, yani yalnızca tamamen benzersiz (başka hiçbir satırla eşleşmeyen) satırları bırakır.

keep='last' örneği:

df_keep_last = df.drop_duplicates(keep='last')
print("\nSon tekrarı koruyarak tekrarlardan arındırılmış DataFrame:")
print(df_keep_last)

Çıktı:

Son tekrarı koruyarak tekrarlardan arındırılmış DataFrame:
       Ad   Soyad  Yaş     Şehir
2  Mehmet   Demir   35     İzmir
3     Ali     Can   30    Ankara
4    Ayşe  Yılmaz   25  İstanbul
5     Cem      Ak   28     Bursa

Burada, (Ali, Can, 30, Ankara) satırının 0. indeksteki yerine 3. indeksteki, (Ayşe, Yılmaz, 25, İstanbul) satırının 1. indeksteki yerine 4. indeksteki örneği korunmuştur.

keep=False örneği:

df_keep_false = df.drop_duplicates(keep=False)
print("\nTüm tekrar edenleri silerek tamamen benzersiz satırlar:")
print(df_keep_false)

Çıktı:

Tüm tekrar edenleri silerek tamamen benzersiz satırlar:
       Ad   Soyad  Yaş   Şehir
2  Mehmet   Demir   35   İzmir
5     Cem      Ak   28   Bursa

Bu durumda, Ali Can ve Ayşe Yılmaz’a ait tüm kayıtlar silinmiştir, çünkü bu kayıtlar birden fazla kez geçiyordu. Sadece Mehmet Demir ve Cem Ak’a ait kayıtlar benzersiz olduğu için kalmıştır.

inplace Parametresi: Değişiklikleri Orijinal DataFrame’e Uygulama

inplace parametresi, işlemin orijinal DataFrame üzerinde mi yoksa yeni bir DataFrame döndürülerek mi yapılacağını kontrol eder.

  • False (Varsayılan): İşlem sonucunda yeni bir DataFrame döndürür ve orijinal DataFrame’i değiştirmez.
  • True: İşlemi doğrudan orijinal DataFrame üzerinde gerçekleştirir ve None döndürür. Bu, bellek açısından daha verimli olabilir ancak dikkatli kullanılmalıdır, çünkü orijinal verinizi geri döndürülemez bir şekilde değiştirir.
print("\ninplace=True ile orijinal DataFrame'i değiştirme:")
df.drop_duplicates(inplace=True)
print(df)

Çıktı:

inplace=True ile orijinal DataFrame'i değiştirme:
       Ad   Soyad  Yaş     Şehir
0     Ali     Can   30    Ankara
1    Ayşe  Yılmaz   25  İstanbul
2  Mehmet   Demir   35     İzmir
5     Cem      Ak   28     Bursa

Bu işlemden sonra df artık tekrarlardan arındırılmış haldedir.

ignore_index Parametresi: İndeksi Sıfırlama

ignore_index parametresi, tekrar eden satırlar silindikten sonra kalan DataFrame’in indeksini sıfırlayıp sıfırlamayacağını kontrol eder.

  • False (Varsayılan): Orijinal indeks değerlerini korur.
  • True: Yeni DataFrame’in indeksini 0’dan başlayarak sıfırlar. Bu, indeksin sıralı ve kesintisiz olmasını istediğinizde kullanışlıdır.
df_reset_index = pd.DataFrame(data).drop_duplicates(ignore_index=True)
print("\nİndeksi sıfırlanmış tekrarlardan arındırılmış DataFrame:")
print(df_reset_index)

Çıktı:

İndeksi sıfırlanmış tekrarlardan arındırılmış DataFrame:
       Ad   Soyad  Yaş     Şehir
0     Ali     Can   30    Ankara
1    Ayşe  Yılmaz   25  İstanbul
2  Mehmet   Demir   35     İzmir
3     Cem      Ak   28     Bursa

Varsayılan drop_duplicates() çıktısındaki indeks (0, 1, 2, 5) yerine, ignore_index=True ile (0, 1, 2, 3) şeklinde sıralı bir indeks elde ettik.

Pratik Kullanım Senaryoları ve İpuçları

drop_duplicates() fonksiyonunu veri temizleme görevlerinizde daha etkin kullanmanıza yardımcı olacak bazı pratik senaryolar ve ipuçları:

1. Sadece Belirli Bir Sütunda Tekrar Eden Değerleri Temizleme

Bazen sadece belirli bir anahtar sütundaki (örneğin, ‘E-posta Adresi’ veya ‘Kullanıcı Kimliği’) tekrarları temizlemek istersiniz.

data_users = {
    'UserID': [101, 102, 103, 101, 104],
    'Email': ['a@x.com', 'b@y.com', 'c@z.com', 'a@x.com', 'd@w.com'],
    'LastLogin': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04', '2023-01-05']
}
df_users = pd.DataFrame(data_users)

print("Orijinal Kullanıcı DataFrame:")
print(df_users)

UserID'ye göre tekrar edenleri sil, en son girişi koru

df_unique_users = df_users.drop_duplicates(subset=['UserID'], keep='last', ignore_index=True) print("\nUserID'ye göre benzersiz kullanıcılar (son giriş korunarak):") print(df_unique_users)

Çıktı:

Orijinal Kullanıcı DataFrame:
   UserID    Email   LastLogin
0     101  a@x.com  2023-01-01
1     102  b@y.com  2023-01-02
2     103  c@z.com  2023-01-03
3     101  a@x.com  2023-01-04
4     104  d@w.com  2023-01-05

UserID'ye göre benzersiz kullanıcılar (son giriş korunarak):
   UserID    Email   LastLogin
0     102  b@y.com  2023-01-02
1     103  c@z.com  2023-01-03
2     101  a@x.com  2023-01-04
3     104  d@w.com  2023-01-05

Burada, UserID=101 için iki kayıt vardı. keep='last' sayesinde, 2023-01-04 tarihli son giriş bilgisi korunmuştur.

2. Tekrar Eden Satırları Sildikten Sonra İndeks Yönetimi

drop_duplicates() işlemi, bazı satırları kaldırdığı için orijinal indeksin sıralamasını bozabilir. Eğer sonraki işlemlerinizde sıralı bir indekse ihtiyacınız varsa, reset_index(drop=True) kullanarak indeksi sıfırlayabilirsiniz. ignore_index=True parametresi, drop_duplicates() ile aynı anda bu işlemi yapar.

df_temp = pd.DataFrame(data)
df_cleaned = df_temp.drop_duplicates().reset_index(drop=True)
print("\nTekrarlardan arındırılmış ve indeksi sıfırlanmış DataFrame (reset_index ile):")
print(df_cleaned)

Çıktı:

Tekrarlardan arındırılmış ve indeksi sıfırlanmış DataFrame (reset_index ile):
       Ad   Soyad  Yaş     Şehir
0     Ali     Can   30    Ankara
1    Ayşe  Yılmaz   25  İstanbul
2  Mehmet   Demir   35     İzmir
3     Cem      Ak   28     Bursa

3. Tekrarları Tespit Etme (duplicated())

drop_duplicates() fonksiyonunu çalıştırmadan önce, veri setinizde kaç tane tekrar eden satır olduğunu görmek isteyebilirsiniz. Bunun için duplicated() fonksiyonunu kullanabilirsiniz. duplicated() fonksiyonu, her satır için bir boolean Series döndürür; True değeri, o satırın daha önceki bir satırla tekrar ettiğini gösterir.

print("\nTekrar eden satırları tespit etme (duplicated()):")
print(df.duplicated()) # df, inplace=True ile değiştirildiği için yeni df kullanmak daha doğru
temp_df = pd.DataFrame(data) # Orijinal veri setini tekrar oluşturalım
print(temp_df.duplicated())

Tekrar eden satırları görüntüleme

print("\nTekrar eden satırlar (ikinci ve sonraki örnekler):") print(temp_df[temp_df.duplicated()])

keep='last' ile duplicated() kullanmak

print("\nTekrar eden satırları tespit etme (keep='last' ile):") print(temp_df.duplicated(keep='last'))

keep=False ile duplicated() kullanmak

print("\nTekrar eden satırları tespit etme (keep=False ile):") print(temp_df.duplicated(keep=False))

Çıktı:

Tekrar eden satırları tespit etme (duplicated()):
0    False
1    False
2    False
3     True
4     True
5    False
dtype: bool

Tekrar eden satırlar (ikinci ve sonraki örnekler):
      Ad   Soyad  Yaş     Şehir
3    Ali     Can   30    Ankara
4   Ayşe  Yılmaz   25  İstanbul

Tekrar eden satırları tespit etme (keep='last' ile):
0     True
1     True
2    False
3    False
4    False
5    False
dtype: bool

Tekrar eden satırları tespit etme (keep=False ile):
0     True
1     True
2    False
3     True
4     True
5    False
dtype: bool

duplicated(keep=False) ile, tekrar eden herhangi bir grubun parçası olan tüm satırları True olarak işaretleyerek, tamamen benzersiz satırları kolayca filtreleyebilirsiniz.

Performans ve Büyük Veri Kümeleri

Büyük veri kümeleriyle çalışırken drop_duplicates() fonksiyonunun performansı önemli olabilir. İşlem süresi, DataFrame’in boyutu, sütun sayısı ve tekrar eden satırların dağılımına bağlı olarak değişir.

* Bellek Kullanımı: drop_duplicates() işlemi, dahili olarak bir hash tablosu veya sıralama algoritması kullanabilir. Bu, özellikle çok sayıda sütun veya büyük metin alanları içeren veri setleri için önemli miktarda bellek tüketebilir.
* Sütun Seçimi (subset): Mümkünse, subset parametresini kullanarak tekrar edenleri kontrol etmek için sadece gerekli sütunları belirtin. Bu, karşılaştırma maliyetini düşürerek performansı artırabilir. Daha az sütun üzerinde hashleme veya sıralama yapmak, tüm sütunlar üzerinde yapmaktan daha hızlıdır.
* inplace=True Kullanımı: inplace=True kullanmak, yeni bir DataFrame oluşturma maliyetinden kaçınmanızı sağlar ve büyük veri setleri için bellek açısından daha verimli olabilir. Ancak, orijinal veriyi geri döndürülemez bir şekilde değiştirdiği için dikkatli kullanılmalıdır.

Genel olarak, Pandas drop_duplicates() fonksiyonu çoğu durumda oldukça optimize edilmiş ve hızlı çalışır. Ancak milyonlarca satır ve yüzlerce sütun içeren çok büyük veri setlerinde, işlem süresini ve bellek kullanımını izlemek ve gerekirse yukarıdaki ipuçlarını uygulamak faydalı olacaktır.

Sonuç ve Sıkça Sorulan Sorular (SSS)

Pandas drop_duplicates() fonksiyonu, veri temizleme ve ön işleme adımlarının vazgeçilmez bir parçasıdır. Veri setlerinizdeki gereksiz tekrarları ortadan kaldırarak analizlerinizin doğruluğunu artırır, depolama ve işleme verimliliğini iyileştirir. subset, keep, inplace ve ignore_index gibi parametreleri kullanarak, bu fonksiyonu kendi özel ihtiyaçlarınıza göre esnek bir şekilde uyarlayabilirsiniz.

Sıkça Sorulan Sorular (SSS)

1. drop_duplicates() ile unique() arasındaki fark nedir?

drop_duplicates() bir DataFrame veya Series’ten tekrar eden satırları veya değerleri kaldırır ve geriye bir DataFrame veya Series döndürür. Örneğin, df.drop_duplicates() tüm tekrar eden satırları siler. Series.unique() ise bir Series’teki tüm benzersiz değerleri bir NumPy dizisi olarak döndürür. Sadece bir sütundaki benzersiz değerleri görmek istediğinizde df['SütunAdı'].unique() kullanırsınız.

2. Sadece belirli sütunlarda tekrar edenleri nasıl bulurum?

subset parametresini kullanarak belirli sütunları belirtebilirsiniz. Örneğin, df.drop_duplicates(subset=['UserID', 'TransactionID']) sadece ‘UserID’ ve ‘TransactionID’ sütunlarında aynı olan satırları dikkate alacaktır.

3. Tekrar eden satırları sildikten sonra indeks neden bozulur ve nasıl düzeltirim?

drop_duplicates() fonksiyonu, satırları kaldırdığı için orijinal indeks değerleri arasında boşluklar oluşabilir. Örneğin, 0, 1, 2, 5 gibi bir indeksiniz olabilir. Bunu düzeltmek ve sıralı, kesintisiz bir indeks elde etmek için ignore_index=True parametresini kullanabilir veya işlemi yaptıktan sonra reset_index(drop=True) çağırabilirsiniz.

4. NaN (Not a Number) değerleri drop_duplicates() tarafından nasıl ele alınır?

Pandas drop_duplicates(), NaN değerlerini birbirine eşit kabul eder. Yani, iki farklı satırda aynı sütunda NaN varsa, bu iki satırın o sütun değeri açısından tekrar ettiği kabul edilir. Örneğin, [1, NaN] ve [1, NaN] iki tekrar eden satır olarak değerlendirilir.

5. drop_duplicates() kullanmadan önce kaç tane tekrar eden satır olduğunu nasıl öğrenebilirim?

duplicated() fonksiyonunu kullanabilirsiniz. df.duplicated().sum() size tekrar eden (yani ilk örnek dışındaki) satır sayısını verir. Eğer keep=False davranışını simüle etmek isterseniz, df.duplicated(keep=False).sum() size tekrar eden bir grubun parçası olan tüm satırların sayısını verecektir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.