DataFrames Üzerinde Boole Dizinleme
Bir sütuna boole koşulu uygulayarak satırları filtreleyin ve birden çok koşulu & ve | işleçleriyle birleştirin.
DataFrames Üzerinde Boole Dizinleme, CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Pandas & NumPy Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
Boole Dizinleme Nedir?
Boole dizinleme, True ve False değerlerinden oluşan bir Series üreten koşulu uygulayarak bir DataFrame'deki satırları filtrelemenizi sağlar. Yalnızca koşulun True olduğu satırlar döndürülür. Bu, hem okunabilir hem de hızlı olduğu için Pandas'ta en sık kullanılan seçim tekniklerinden biridir.
Örneğin, bir satış DataFrame'i verildiğinde, döngü yazmadan gelirin 1000'i aştığı tüm satırları anında alabilirsiniz.
import pandas as pd
df = pd.DataFrame({
'product': ['A', 'B', 'C', 'D'],
'revenue': [500, 1500, 800, 2000]
})
# Boolean condition produces a Series of True/False
mask = df['revenue'] > 1000
print(mask)
# 0 False
# 1 True
# 2 False
# 3 TrueBoole Maskesini Uygulama
Bir boole maskeniz olduğunda, yalnızca eşleşen satırları seçmek için maskeyi DataFrame üzerinde köşeli parantezlerin içine geçirirsiniz. Sonuç yeni bir DataFrame'dir; özgün DataFrame hiçbir zaman değiştirilmez. Özgün satır dizinleri korunur, böylece her satırın nereden geldiğini her zaman bilirsiniz.
Bu kalıp — maskeyi oluşturup ardından uygulama — satır filtreleme için standart Pandas deyimidir.
import pandas as pd
df = pd.DataFrame({
'product': ['A', 'B', 'C', 'D'],
'revenue': [500, 1500, 800, 2000]
})
mask = df['revenue'] > 1000
filtered = df[mask]
print(filtered)
# product revenue
# 1 B 1500
# 3 D 2000Maske Değişkeni Olmadan Satır İçi Koşullar
Boole Series'ini bir değişkene atamanız gerekmez. Koşulu doğrudan köşeli parantezlerin içinde satır içi olarak yazabilirsiniz: df[df['col'] > value]. Bu tek satırlık biçim, kodu kısa ve okunabilir tuttuğu için veri analizi not defterlerinde çok yaygındır.
Her iki yaklaşım da — maske değişkeni ve satır içi kullanım — aynı sonuçları üretir. Koşul karmaşıksa veya yeniden kullanılacaksa değişken kullanın; basit ve tek seferlik filtreler için satır içi kullanımı tercih edin.
import pandas as pd
df = pd.DataFrame({
'city': ['NYC', 'LA', 'Chicago', 'Houston'],
'population': [8_336_817, 3_979_576, 2_693_976, 2_320_268]
})
# Inline boolean filter
large_cities = df[df['population'] > 3_000_000]
print(large_cities)
# city population
# 0 NYC 8336817
# 1 LA 3979576& (AND) ile Koşulları Birleştirme
Her iki koşulun da doğru olmasını istiyorsanız bunları & işleciyle birleştirin; öğe bazında diziler üzerinde çalışmayan Python and anahtar sözcüğünü kullanmayın. & karşılaştırma işleçlerinden daha yüksek önceliğe sahip olduğundan, her koşul parantez içine alınmalıdır.
Sonuçta yalnızca her alt koşulun True olarak değerlendirildiği satırlar tutulur.
import pandas as pd
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Carol', 'Dave'],
'age': [25, 35, 28, 45],
'salary': [50000, 90000, 70000, 120000]
})
# Both conditions must be true
result = df[(df['age'] > 27) & (df['salary'] > 60000)]
print(result)
# name age salary
# 1 Bob 35 90000
# 2 Carol 28 70000| (OR) ile Koşulları Birleştirme
En az bir koşulun doğru olduğu satırları tutmak için | işlecini kullanın. & işlecinde olduğu gibi her alt koşul parantez içinde olmalıdır. | işleci, boole dizileri üzerinde öğe bazında mantıksal OR işlemi gerçekleştirir.
& ve | işaretlerini birlikte kullanmak tamamen geçerlidir; doğru değerlendirme sırasını sağlamak ve fark edilmesi zor mantık hatalarından kaçınmak için parantezleri dikkatli kullanın.
import pandas as pd
df = pd.DataFrame({
'product': ['Laptop', 'Mouse', 'Monitor', 'Keyboard'],
'price': [1200, 25, 300, 80],
'category': ['Electronics', 'Accessories', 'Electronics', 'Accessories']
})
# Rows where price > 200 OR category is Accessories
result = df[(df['price'] > 200) | (df['category'] == 'Accessories')]
print(result)
# product price category
# 0 Laptop 1200 Electronics
# 1 Mouse 25 Accessories
# 2 Monitor 300 Electronics
# 3 Keyboard 80 Accessories~ ile Koşulu Tersine Çevirme
~ tilde işleci bir boole Series'ini tersine çevirir; True değerini False'a, False değerini de True'a dönüştürür. 'NOT' mantığını ifade etmek için ~ kullanın: bir koşulla eşleşmeyen satırları tutun. Bu, karşıt koşulu elle oluşturmaktan daha temizdir.
Örneğin df[~df['status'].isin(['cancelled', 'refunded'])], bu iki durum dışındaki tüm satırları tutar.
import pandas as pd
df = pd.DataFrame({
'order_id': [1, 2, 3, 4],
'status': ['shipped', 'cancelled', 'delivered', 'refunded']
})
# Keep only rows that are NOT cancelled
active = df[~(df['status'] == 'cancelled')]
print(active)
# order_id status
# 0 1 shipped
# 2 3 delivered
# 3 4 refundedDize Değerlerine Göre Filtreleme
Boole dizinleme metin sütunlarında da aynı şekilde çalışır. == ile tam eşleşmeye göre filtreleyebilir veya esnek metin filtreleme için koşul içinde .str yöntemlerini, örneğin .str.startswith(), .str.contains() ya da .str.upper() kullanabilirsiniz.
Pandas'ta dize karşılaştırmaları varsayılan olarak büyük-küçük harfe duyarlıdır; bu nedenle 'NYC' ve 'nyc' farklı değerler olarak kabul edilir. Gerekirse önce harf kullanımını normalleştirin.
import pandas as pd
df = pd.DataFrame({
'country': ['USA', 'Germany', 'UK', 'USA', 'France'],
'sales': [400, 200, 150, 600, 300]
})
# Filter rows where country equals USA
us_sales = df[df['country'] == 'USA']
print(us_sales)
# country sales
# 0 USA 400
# 3 USA 600
# Filter rows where country starts with 'G'
g_countries = df[df['country'].str.startswith('G')]
print(g_countries)
# country sales
# 1 Germany 200Birden Çok Sütuna Göre Filtreleme
Karmaşık analizlerde çoğu zaman & ve | ile birleştirilen birden çok sütundaki koşullar gerekir. Çok uzun koşulları okunabilirlik için adlandırılmış boole Series'lerine ayırın; bunların her biri, sonunda birleştireceğiniz adlandırılmış bir alt filtre görevi görür.
Bu yaklaşım niyetinizi açıkça ortaya koyar: her satır, filtre mantığının bir bölümünü açıklayan Türkçe bir cümle gibi okunur.
import pandas as pd
df = pd.DataFrame({
'region': ['North', 'South', 'North', 'East'],
'year': [2022, 2023, 2023, 2022],
'profit': [5000, -200, 8000, 3000]
})
is_north = df['region'] == 'North'
is_2023 = df['year'] == 2023
is_profitable = df['profit'] > 0
result = df[is_north & is_2023 & is_profitable]
print(result)
# region year profit
# 2 North 2023 8000Koşullu Sütunlar için np.where Kullanma
Boole dizinleme satırları filtreler; ancak bazen satırları silmek yerine bir koşula göre yeni bir sütun eklemek istersiniz. np.where(condition, value_if_true, value_if_false), bir sütun boyunca öğe bazında uygulanan if/else yapısının vektörleştirilmiş karşılığıdır ve lambda ile apply kullanmaktan çok daha hızlıdır.
import pandas as pd
import numpy as np
df = pd.DataFrame({
'score': [45, 72, 88, 61, 95]
})
# Create a new column based on a condition
df['grade'] = np.where(df['score'] >= 70, 'Pass', 'Fail')
print(df)
# score grade
# 0 45 Fail
# 1 72 Pass
# 2 88 Pass
# 3 61 Fail
# 4 95 PassFiltrelenmiş Bir Alt Kümeye Değer Atama
Filtrelenmiş satırların değerlerini .loc[mask, column] kullanarak yerinde güncelleyebilirsiniz. Alt kümeye değer atamanın güvenli yolu budur; df[mask]['col'] = value gibi zincirlenmiş dizinleme bir kopya üzerinde çalıştığı için SettingWithCopyWarning oluşturabilir.
Özgün DataFrame'i yerinde değiştirmek istediğinizde her zaman df.loc[mask, 'col'] = value kullanımını tercih edin.
import pandas as pd
df = pd.DataFrame({
'item': ['A', 'B', 'C', 'D'],
'stock': [0, 5, 0, 12]
})
# Mark out-of-stock items
df.loc[df['stock'] == 0, 'status'] = 'Out of Stock'
df.loc[df['stock'] > 0, 'status'] = 'Available'
print(df)
# item stock status
# 0 A 0 Out of Stock
# 1 B 5 Available
# 2 C 0 Out of Stock
# 3 D 12 AvailableMaskeyi Sayma ve Toplama
Boole değerleri arka planda 1 (True) ve 0 (False) olduğundan, eşleşen satırları saymak için bir maskede .sum(), eşleşen satırların oranını elde etmek için .mean() çağrısını kullanabilirsiniz. Bu hızlı sayımlar, satırları seçmek üzere filtrenizi uygulamadan önce filtre mantığınızı doğrulamanıza yardımcı olur.
import pandas as pd
df = pd.DataFrame({'value': [10, 55, 30, 80, 20, 70]})
mask = df['value'] > 40
print('Count of rows > 40:', mask.sum()) # 3
print('Fraction > 40:', mask.mean().round(2)) # 0.5
# Now apply
print(df[mask])
# value
# 1 55
# 3 80
# 5 70Hızlı Kontrol
DataFrame'lerde boole dizinleme konusundaki anlayışınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: boole maskeleri bir sütuna koşul uygulayarak satırları filtreler, & ve | işleçleri birden çok koşulu birleştirir (Python'ın and/or işleçlerini değil) ve ~ işareti NOT mantığı için bir boole maskesini tersine çevirir. Filtrelenmiş satırlara güvenli biçimde değer atamak için df.loc[mask, col] = value kullanın. Sırada, filtreleri okunabilir dizeler olarak yazmak için query() yöntemini inceleyeceğiz.
Sıkça Sorulan Sorular
“DataFrames Üzerinde Boole Dizinleme” dersi ücretsiz mi?
Evet — “DataFrames Üzerinde Boole Dizinleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Pandas & NumPy Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Pandas & NumPy Academy kursu toplamda 4 dersten oluşur.
“DataFrames Üzerinde Boole Dizinleme” dersinde ne öğreneceğim?
Bir sütuna boole koşulu uygulayarak satırları filtreleyin ve birden çok koşulu & ve | işleçleriyle birleştirin. Pandas & NumPy Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Pandas & NumPy Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Pandas & NumPy Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“DataFrames Üzerinde Boole Dizinleme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Pandas & NumPy Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Pandas & NumPy Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- DataFrames Üzerinde Boole Dizinleme
- query() Yöntemi
- isin() ve between() Filtreleri
- Desene Göre Sütun Seçme