0Pricing
Pandas & NumPy Academy · Ders

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     True

Boole 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     2000

Maske 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   refunded

Dize 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    200

Birden Ç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    8000

Koş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  Pass

Filtrelenmiş 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     Available

Maskeyi 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     70

Hı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

  1. DataFrames Üzerinde Boole Dizinleme
  2. query() Yöntemi
  3. isin() ve between() Filtreleri
  4. Desene Göre Sütun Seçme
← Pandas & NumPy Academy Sayfasına Dön