Kurs
Yinelenenleri kaldırmak, aynı şeyi birden fazla kez saymak istemediğiniz için doğru sayımlara ulaşmak açısından temel bir beceridir. Python'da bu işlem, Pandas modülündeki drop_duplicates adlı yöntem kullanılarak yapılabilir.
Bunu birkaç örnek yardımıyla nasıl kullanacağımızı anlayalım.
Yinelenen İsimleri Kaldırma
Diyelim ki veteriner ziyaretlerini içeren bir veri çerçeveniz (dataframe) var ve veteriner kliniği, kliniklerini ziyaret eden her ırktan kaç köpek olduğunu bilmek istiyor. Ancak veri kümenizde veterineri birden fazla kez ziyaret eden Max ve Stella gibi köpekler var. Bu nedenle, ırk sütunundaki her bir ırkın sayısını doğrudan sayamazsınız.
print(vet_visits)
date name breed weight_kg
0 2018-09-02 Bella Labrador 24.87
1 2019-06-07 Max Labrador 28.35
2 2018-01-17 Stella Chihuahua 1.51
3 2019-10-19 Lucy Chow Chow 24.07
.. ... ... ... ...
71 2018-01-20 Stella Chihuahua 2.83
72 2019-06-07 Max Chow Chow 24.01
73 2018-08-20 Lucy Chow Chow 24.40
74 2019-04-22 Max Labrador 28.54
Bunu başarmak için, daha önce listelenmiş bir köpek adını içeren satırları kaldırırsınız; başka bir deyişle, veri kümesinden her bir isimden birer köpek çıkarırsınız.
Bunu drop_duplicates yöntemiyle yaparsınız. Bu yöntem subset adlı bir argüman alır; bu, yinelenenleri bulmak istediğimiz sütundur — bu durumda tüm benzersiz isimleri istiyoruz.
vet_visits.drop_duplicates(subset="name")
date name breed weight_kg
0 2018-09-02 Bella Labrador 24.87
1 2019-06-07 Max Chow Chow 24.01
2 2019-03-19 Charlie Poodle 24.95
3 2018-01-17 Stella Chihuahua 1.51
4 2019-10-19 Lucy Chow Chow 24.07
7 2019-03-30 Cooper Schnauzer 16.91
10 2019-01-04 Bernie St. Bernard 74.98
(6 2019-06-07 Max Labrador 28.35)
Peki, aynı ada sahip köpekler varsa ne olur?
Yinelenen Çiftleri Kaldırma
Bu durumda, yinelenenleri kaldırırken yalnızca name sütununu dikkate almamız yeterli değildir. Max ve Max farklı ırklar olduğundan, veri kümesinde daha önce listelenmiş olan isim ve ırk çiftlerinin yer aldığı satırları kaldırabiliriz.
unique_dogs = vet_visits.drop_duplicates(subset=["name", "breed"])
print(unique_dogs)
date name breed weight_kg
0 2018-09-02 Bella Labrador 24.87
1 2019-03-13 Max Chow Chow 24.13
2 2019-03-19 Charlie Poodle 24.95
3 2018-01-17 Stella Chihuahua 1.51
4 2019-10-19 Lucy Chow Chow 24.07
6 2019-06-07 Max Labrador 28.35
7 2019-03-30 Cooper Schnauzer 16.91
10 2019-01-04 Bernie St. Bernard 74.98
Yinelenenleri birden fazla sütuna göre temellendirmek için, sütun adlarının bir listesini subset argümanına geçebiliriz; bu örnekte isim ve ırk.
Artık her iki Max de dahil edilmiştir.
Etkileşimli Örnek
Bu alıştırmada, sales içindeki benzersiz değerleri kullanarak bazı yeni DataFrame'ler oluşturacaksınız. sales hazırdır ve pandas pd olarak içe aktarılmıştır.
Şu adımları uygulayacaksınız:
- Önce,
salesiçindeki yinelenenstorevetypeçiftlerine sahip satırları kaldıracak,store_typesolarak kaydedecek ve ilk satırları yazdıracaksınız. - Ardından,
salesiçindeki yinelenenstorevedepartmentçiftlerine sahip satırları kaldıracak,store_deptsolarak kaydedecek ve ilk satırları yazdıracaksınız. - Tatil haftası olan satırları alt kümeye alacak ve yinelenen
datesdeğerlerini kaldırarakholiday_datesolarak kaydedeceksiniz. - Son olarak,
holiday_datesDataFrame'inindatesütununu seçecek veholiday_datesDataFrame'ini yazdıracaksınız.
# Drop duplicate store/type combinations
store_types = sales.drop_duplicates(subset=["store", "type"])
print(store_types.head())
# Drop duplicate store/department combinations
store_depts = sales.drop_duplicates(subset=["store", "department"])
print(store_depts.head())
# Subset the rows that are holiday weeks and drop duplicate dates
holiday_dates = sales[sales["is_holiday"]].drop_duplicates(subset="date")
# Print date col of holiday_dates
print(holiday_dates["date"])
Yukarıdaki kodu çalıştırdığımızda aşağıdaki sonuç üretilir:
store type department date weekly_sales is_holiday temperature_c fuel_price_usd_per_l unemployment
0 1 A 1 2010-02-05 24924.50 False 5.728 0.679 8.106
901 2 A 1 2010-02-05 35034.06 False 4.550 0.679 8.324
1798 4 A 1 2010-02-05 38724.42 False 6.533 0.686 8.623
2699 6 A 1 2010-02-05 25619.00 False 4.683 0.679 7.259
3593 10 B 1 2010-02-05 40212.84 False 12.411 0.782 9.765
store type department date weekly_sales is_holiday temperature_c fuel_price_usd_per_l unemployment
0 1 A 1 2010-02-05 24924.50 False 5.728 0.679 8.106
12 1 A 2 2010-02-05 50605.27 False 5.728 0.679 8.106
24 1 A 3 2010-02-05 13740.12 False 5.728 0.679 8.106
36 1 A 4 2010-02-05 39954.04 False 5.728 0.679 8.106
48 1 A 5 2010-02-05 32229.38 False 5.728 0.679 8.106
498 2010-09-10
691 2011-11-25
2315 2010-02-12
6735 2012-09-07
6810 2010-12-31
6815 2012-02-10
6820 2011-09-09
Name: date, dtype: datetime64[ns]
Veri sayımı ve toplamaya ilişkin daha fazla bilgi edinmek için kursumuzdaki şu videoyu izleyin: pandas ile Veri Manipülasyonu.
Bu içerik, Maggie Matsui ve Richie Cotton'ın hazırladığı DataCamp’in pandas ile Veri Manipülasyonu kursundan alınmıştır.
