Öğe Bazlı İşlemler için map() ve applymap()
Bir Series'in her öğesine map(), bir DataFrame'in her hücresine applymap() ile bir işlev uygulayın.
Öğe Bazlı İşlemler için map() ve applymap(), CoddyKit'te ücretsiz bir Pandas & NumPy Academy dersidir. Bu, 4 dersinin 3. 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.
Series.map() Genel Bakış
Series.map(), bir işlevi, sözlüğü veya başka bir Series nesnesini bir Series nesnesinin her öğesine uygular ve yeni bir Series döndürür. Karmaşık nesneler alabilen apply()'dan farklı olarak map() her zaman tek tek skaler değerler üzerinde çalışır. Kategorik değerleri kodlamak, bir eşleme tablosundan etiket aramak veya her öğeye basit bir dönüşüm uygulamak için kullanılan standart araçtır.
import pandas as pd
codes = pd.Series(['N', 'S', 'E', 'N', 'W'])
region_names = {'N': 'North', 'S': 'South', 'E': 'East', 'W': 'West'}
names = codes.map(region_names)
print(names)Bir İşlevle map() Kullanımı
Dönüşüm bir arama tablosu yerine mantık içerdiğinde map() işlevine bir işlev (lambda dahil) geçirin. İşlev her seferinde tek bir skaler değer alır; bu nedenle diğer satırlara veya sütunlara erişemez. Basit bir koşullu etiket ataması için işlevle birlikte map() kullanmak döngüden daha temiz, ancak büyük Series nesnelerinde np.where() kullanmaktan daha yavaştır.
prices = pd.Series([5.0, 25.0, 80.0, 150.0])
category = prices.map(lambda p: 'budget' if p < 20 else 'mid' if p < 100 else 'premium')
print(category)map() ve replace() Karşılaştırması
Hem map() hem de replace(), bir sözlük kullanarak değerleri değiştirebilir. Temel fark şudur: map(), sözlükte bulunmayan her değer için NaN döndürür (sonrasında fillna() kullanmadığınız sürece); replace() ise eşleşmeyen değerleri değiştirmeden bırakır. Yalnızca belirli değerleri değiştirmek ve diğer her şeyi olduğu gibi korumak istediğinizde replace() kullanın.
s = pd.Series(['A', 'B', 'C', 'D'])
map_dict = {'A': 'Alpha', 'B': 'Beta'}
print('map():', s.map(map_dict).tolist()) # C,D → NaN
print('replace():', s.replace(map_dict).tolist()) # C,D → unchangedBir Series ile map() Kullanımı (Etiket Arama)
map() işlevine başka bir Series nesnesini arama tablosu olarak geçirebilirsiniz: çağrıyı yapan Series'in değerleri, bağımsız değişken olarak verilen Series'in indeksinde değer aramak için anahtar olarak kullanılır. Bu, tam bir merge() çağrısı yapmadan arama tablosunu birleştirmenin kısa bir yoludur — arama tablosunun anahtara göre indekslendiği vektörleştirilmiş bir sözlük araması gibi çalışır.
prices_lookup = pd.Series(
[10.0, 25.0, 50.0],
index=['SKU-001', 'SKU-002', 'SKU-003']
)
orders = pd.Series(['SKU-002', 'SKU-001', 'SKU-003', 'SKU-001'])
order_prices = orders.map(prices_lookup)
print(order_prices)Hücre Bazında İşlemler için DataFrame.applymap()
DataFrame.applymap() (Pandas 2.1+ sürümünde DataFrame.map() olarak adlandırılır), bir işlevi DataFrame'in her hücresine tek tek uygular. Tam bir sütun alan apply(axis=0)'dan farklı olarak applymap() her seferinde tek bir skaler değer alır. Tüm hücreleri tutarlı biçimde biçimlendirmek için kullanışlıdır; örneğin her sayısal hücreyi 2 ondalık basamağa yuvarlamak veya her metin hücresini küçük harfe dönüştürmek gibi.
df = pd.DataFrame({
'a': [1.234, 5.678, 9.012],
'b': [3.456, 7.890, 2.345]
})
# Round every cell to 1 decimal place
df_rounded = df.applymap(lambda x: round(x, 1))
print(df_rounded)Metin Biçimlendirme için applymap()
Karma metinlerden oluşan bir DataFrame'deki her hücreye tutarlı metin biçimlendirmesi uygulayın; örneğin tüm değerleri baş harfleri büyük olacak şekilde yazmak veya None değerlerini boş metne dönüştürmek gibi. applymap(str.strip), tek bir çağrıyla tüm DataFrame'deki her hücrenin başındaki ve sonundaki boşlukları kaldırır; bu, sütunlar üzerinde yineleme yapıp her birine ayrı ayrı .str.strip() uygulamaktan çok daha kısadır.
df_str = pd.DataFrame({
'name': [' Alice ', 'Bob ', ' Carol'],
'city': ['new york ', ' london', 'paris ']
})
df_clean = df_str.applymap(str.strip)
print(df_clean)Para Birimi Biçimlendirme için applymap()
Bir raporda görüntülenmek üzere DataFrame hazırlarken, applymap() kullanarak sayısal hücreleri para birimi metinleri olarak biçimlendirin. Bu işlem, temel veri türlerini değiştirmeden sayıları görüntülenmeye hazır metinlere dönüştürür; dönüşüm yalnızca nihai çıktı içindir. Biçimlendirilmiş tabloyu dışa aktarmak üzere to_excel() veya to_html() çağrısından önce bunu son adım olarak uygulayın.
revenue_table = pd.DataFrame({
'North': [12300.0, 9800.0],
'South': [7400.0, 11200.0]
}, index=['Q1', 'Q2'])
formatted = revenue_table.applymap(lambda x: f'${x:,.0f}')
print(formatted)Pandas 2.1: applymap, map Olarak Yeniden Adlandırıldı
Pandas 2.1'de DataFrame.applymap(), Series.map() ile tutarlı olması için DataFrame.map() olarak yeniden adlandırıldı. Eski applymap() kullanımdan kaldırılma uyarısıyla çalışmaya devam eder. Üretim kodunda Pandas sürümünüzü kontrol edin ve gelecekteki sürümlerde kullanımdan kaldırılma uyarılarından kaçınmak için 2.1 veya sonraki bir sürüm kullanıyorsanız df.map(func) tercih edin.
import pandas as pd
print('Pandas version:', pd.__version__)
# Forward-compatible pattern:
if hasattr(pd.DataFrame, 'map'):
df_clean = df_str.map(str.strip) # Pandas 2.1+
else:
df_clean = df_str.applymap(str.strip) # Pandas < 2.1
print(df_clean)Kategorik Özellikleri Kodlamak için map()
Makine öğrenmesi modelleri sayısal girdiler gerektirir; bu nedenle kategorik sütunların kodlanması gerekir. Bir DataFrame'i modele vermeden önce kategorileri sıralı sayılara dönüştürmek için map() işlevini tamsayı kodlama sözlüğüyle kullanın. Doğal bir sıralaması olmayan adsal kategoriler için bunun yerine pd.get_dummies() veya scikit-learn'un OneHotEncoder aracını tercih edin.
size_order = {'small': 0, 'medium': 1, 'large': 2, 'enterprise': 3}
df['size_encoded'] = df['order_size'].map(size_order)
print(df[['order_size', 'size_encoded']])Çok Adımlı Arama için map() Zincirleme
İki düzeyli bir aramaya ihtiyaç duyduğunuzda iki map() çağrısını zincirleyin: önce bir kodu ara anahtara, ardından ara anahtarı son etikete eşleyin. Örneğin ürün SKU'sunu kategori koduna, ardından kategori kodunu kategori adına eşleyebilirsiniz. İki map() çağrısını zincirlemek, iç içe sözlük kullanmaktan veya birleştirme işleminin ardından başka bir birleştirme yapmaktan daha temizdir.
sku_to_cat_code = {'SKU-001': 'C1', 'SKU-002': 'C2', 'SKU-003': 'C1'}
cat_code_to_name = {'C1': 'Electronics', 'C2': 'Apparel'}
skus = pd.Series(['SKU-001', 'SKU-002', 'SKU-003'])
cat_names = skus.map(sku_to_cat_code).map(cat_code_to_name)
print(cat_names)map ile Öğe Bazında Boş Değer İşleme
map(func) kullanılırken işlev NaN değerleri için de çağrılır; işlev None değerini işlemiyorsa bu durum TypeError'a yol açabilir. İşlevi pd.isna(x) kullanarak bir boş değer denetimiyle sarmalayın veya NaN değerlerini atlamak ve işlevi çağırmadan çıktıda NaN olarak bırakmak için map() içinde na_action='ignore' parametresini kullanın.
s = pd.Series([1.0, None, 3.0, None, 5.0])
# na_action='ignore' skips NaN values
result = s.map(lambda x: x * 2, na_action='ignore')
print(result)Kısa Kontrol
Bu dersteki Veri Analizi kavramlarını anlayıp anlamadığınızı test edin.
Ders Özeti
Bu derste şunları öğrendiniz: işlevler ve sözlüklerle skaler aramalar için Series.map() kullanma, tüm sütunlarda hücre bazında biçimlendirme için DataFrame.applymap()/map() kullanma ve eşleşmeyen değerleri işlerken map() ile replace() arasındaki farkı anlama. Sırada, okunabilir dönüşüm işlem hatları için pipe() ile yöntem zincirlemeyi inceleyeceğiz.
Sıkça Sorulan Sorular
“Öğe Bazlı İşlemler için map() ve applymap()” dersi ücretsiz mi?
Evet — “Öğe Bazlı İşlemler için map() ve applymap()” 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.
“Öğe Bazlı İşlemler için map() ve applymap()” dersinde ne öğreneceğim?
Bir Series'in her öğesine map(), bir DataFrame'in her hücresine applymap() ile bir işlev uygulayın. 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 3. dersidir.
“Öğe Bazlı İşlemler için map() ve applymap()” 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
- Sütunlar ve Satırlarda apply()
- GroupBy ile apply()
- Öğe Bazlı İşlemler için map() ve applymap()
- pipe() ile Yöntem Zincirleme