Kurs
Şirketinizin veritabanından taze bir CSV çekiyorsunuz, df.head() çalıştırıyorsunuz ve CUST_ID_NBR, txn_amt_usd_2, Unnamed: 7 ya da Customer Name (Full) adlı bir sütun görüyorsunuz — sondaki bir boşluk da cabası, ki onu bir KeyError öğleden sonranızı berbat edene kadar fark etmeyeceksiniz. Dağınık sütun adları gerçek veri işinin küçük sürtünmelerindendir ve genelde gerçek analize başlamadan önce yapacağınız ilk şey pandas’ta sütun yeniden adlandırma adımı olur.
Bu pandas’ta sütunları nasıl yeniden adlandıracağınızla ilgili eğitimde şunları öğreneceksiniz:
-
.rename()ile bir ya da birçok sütunun adını değiştirme -
df.columnsveya.set_axis()ile tüm sütun adlarını bir kerede değiştirme -
isimleri topluca dönüştürmek için fonksiyon uygulama
-
.strerişicisiyle dağınık adları temizleme -
pd.read_csv()içinde yükleme anında yeniden adlandırma -
aynı görevleri Polars’ta ele alma
-
KeyErrorveValueError: Length mismatchhatalarına yakalanmaktan kaçınma
Bu eğitim, pandas’ı içe aktarabildiğinizi ve bir DataFrame oluşturabildiğinizi varsayar. Boyunca müşteri kayıtları, satış dışa aktarımları ve sensör okumaları gibi gerçekçi veri setleri kullanacağız; böylece kalıplar, gerçekte çalıştığınız veri türlerine doğrudan karşılık gelir.
Hangi Pandas Yeniden Adlandırma Yöntemini Seçmelisiniz?
Görevinizin kapsamına uyan yöntemi seçin: hedefli bir yeniden adlandırma, tam bir değiştirme veya her ada uygulanan bir kural.
|
Hedefiniz |
Yöntem |
Ne zaman uygun |
|
Belirli bir ya da birkaç sütunun adını değiştirin |
|
Diğer sütunlara dokunmaz; yöntem zincirleri içinde güvenlidir |
|
Her sütun adını değiştirin |
|
Her bir ismi eşleştirmekten daha hızlı; zincirlemeniz gerektiğinde |
|
Bir kurala göre yeniden adlandırın (küçük harf, snake_case, kırpma) |
|
Her sütunu tek tek listelemek yerine kuralı bir kez ifade edin |
|
Yükleme anında yeniden adlandırın |
|
Şemayı siz kontrol ediyorsunuz ve ayrı bir adım istemiyorsunuz |
|
Polars’ta yukarıdakilerin herhangi biri |
|
Değiştirilemez ve zincir-öncelikli, bu yüzden |
.rename() ile Sütunların Adını Nasıl Değiştiririm?
.rename() yöntemi, bir pandas DataFrame sütun yeniden adlandırma işlemini yapmanın en esnek yoludur ve çoğu zaman başvuracağınız yöntem budur.
Eski adları yeni adlara eşleyen bir sözlük alır, bahsetmediğiniz sütunlara dokunmaz ve varsayılan olarak özgün veriyi değiştirmek yerine yeni bir DataFrame döndürür. Bu da .rename()’i yöntem zincirleri içinde kullanmayı güvenli, hata ayıklarken ise düşünmeyi kolay kılar.
Sözlük kalıbı şöyle görünür:
sales_data.rename(columns={"old_name": "new_name"})
Sözlüklere yeniyseniz, tazeleme için Python sözlük metodları eğitimimize göz atmanızı öneririm.
Eski copy parametresi hakkında not
Örneklerden önce küçük bir not. Pandas 3.0 copy parametresini kullanımdan kaldırdı ve Copy-on-Write’ı varsayılan davranış yaptı. Pratikte bu, .rename()’in verinizin pahalı bir kopyasını yapıp yapmadığını dert etmenize gerek kalmadığı anlamına gelir. Pandas bunu perde arkasında tembel şekilde halleder. Üzerinde düşünmeniz gereken başlıca parametre ise inplace; onu da üçüncü alt bölümde ele alacağız.
Tek bir sütunun adını değiştirme
Diyelim ki eski bir CRM’den dışa aktarılmış müşteri kayıtlarını yüklediniz. Sütun adları, 2008’de veritabanını tasarlayan kişinin mantığına uygun kısaltılmış ama size değil. Bu en basit pandas sütun yeniden adlandırma işlemi: bir eski ad, bir yeni ad, bir sözlük içinde:
import pandas as pd
customers = pd.DataFrame({
"cust_id_nbr": [4521, 4522, 4523, 4524],
"first_nm": ["Abe", "Rick", "Pat", "Kim"],
"signup_dt": ["2008-03-12", "2008-03-15", "2008-03-18", "2008-03-21"]
})
print(customers)

Şimdi, cust_id_nbr’ı daha okunur bir şeye yeniden adlandırın:
customers_renamed = customers.rename(columns={"cust_id_nbr": "customer_id"})
print(customers_renamed)

Orijinal customers DataFrame’i değişmedi. .rename() yeni bir DataFrame döndürdü; biz de bunu customers_renamed değişkenine atadık. Bahsetmediğimiz iki sütun (first_nm, signup_dt) aynen geldi.
Birden çok sütunun adını değiştirme
Sözlük doğal olarak ölçeklenir. Bir pandas çoklu sütun yeniden adlandırma görevini ele almak için eşlemeye daha fazla anahtar-değer çifti eklemeniz yeterli:
customers_clean = customers.rename(columns={
"cust_id_nbr": "customer_id",
"first_nm": "first_name",
"signup_dt": "signup_date"
})
print(customers_clean)

Ayrıca columns anahtar sözcüğü yerine mapper ve axis argümanlarını kullanan alternatif bir sözdizimi de vardır:
customers.rename(mapper={"cust_id_nbr": "customer_id"}, axis=1)
axis=1, pandas’a hedefinizin sütunlar olduğunu söyler (axis=0 satır indeks etiketleri içindir). Her iki biçim de aynı sonucu üretir. Sahadaki kodların çoğu bir bakışta daha okunur olduğu için columns={...} kullanır; bu eğitimde de bu kalıba sadık kalacağız.
Faydalı bir ayrıntı: Var olmayan bir sütunla eşleşmeyen bir anahtar geçirirseniz, .rename() varsayılan olarak bunu sessizce yok sayar. Bu, şemaları biraz farklı olan DataFrame’leri işleyebilen, yeniden kullanılabilir bir fonksiyon yazarken kullanışlıdır; fakat yazım hatalarını da gizleyebilir. Bilinmeyen sütun adlarında pandas’ın hata vermesini istiyorsanız errors='raise' parametresini geçin.
inplace kullanımı ve yeni bir DataFrame döndürme
Varsayılan olarak .rename() yeni bir DataFrame döndürür ve orijinali olduğu gibi bırakır. Mevcut DataFrame’in doğrudan değiştirilmesini isterseniz inplace=True geçin:
# Yeni bir DataFrame döndürür (varsayılan)
customers_v2 = customers.rename(columns={"first_nm": "first_name"})
# customers'ı doğrudan değiştirir, None döndürür
customers.rename(columns={"first_nm": "first_name"}, inplace=True)
print(customers)

Peki hangisini kullanmalısınız? Çoğu durumda, yeni bir DataFrame döndüren varsayılan seçenek daha iyidir. Hata ayıklaması da daha kolaydır; bir şeyler ters gittiğinde inceleyebileceğiniz orijinal DataFrame elinizde olur. Ayrıca eski kodlarda SettingWithCopyWarning üreten örtük kopyalama sorunlarını da bertaraf eder.
Artık performans da inplace tercih etmek için gerçek bir sebep değil. Copy-on-Write, pandas 3.0+’da varsayılan; inplace olmayan sürüm tembel kopyalama kullanır. Veriniz gerçekten ancak bir şey değiştirildiğinde kopyalanır. inplace=True’ın belleği tasarruflu kullandığı yönündeki eski argüman artık çok daha zayıf.
inplace=True’ın hâlâ doğal geldiği tek yer, tek bir DataFrame’i adım adım temizlediğiniz ve zincirlemeyi umursamadığınız kısa, keşif amaçlı betiklerdir. Üretim kodunda ya da sonradan döneceğiniz her şeyde varsayılanı tercih edin.
Pandas’ta Tüm Sütunların Adını Bir Kerede Nasıl Değiştiririm?
Bazen eski adları yenilerine eşlemek istemezsiniz. Tüm sütun adlarını bir kerede değiştirmek istersiniz. Bu, düşündüğünüzden daha sık karşınıza çıkar: pandas’ın sütun adlarını 0, 1, 2 olarak atadığı başlıksız CSV’lerde, başlık satırının farklı bir dilde olduğu veri setlerinde ya da Field1, Field2, Field3 gibi adlar içeren sistem üretimi dışa aktarımlarda.
Bunu yapmanın iki yaygın yolu var: Doğrudan df.columns’a atama yapmak veya .set_axis() kullanmak. Aynı sonucu üretirler. Tercih, kısalık ile zincirlenebilirlik arasındadır.
df.columns’a bir liste atamak
En doğrudan yaklaşım, columns özniteliğine yeni bir liste atamaktır. Başlık bilgisi olmayan, başlıksız bir CSV okurken elde edeceğiniz türden, listelerin listesinden oluşturulmuş şu DataFrame’i ele alın. Pandas tamsayı sütun adlarına geri döner:
import pandas as pd
sensor_readings = pd.DataFrame([
[1.2, 22.5, 1013],
[1.5, 22.7, 1012],
[1.3, 22.6, 1013]
])
print(sensor_readings)

Bu 0, 1 ve 2 sütun adları analiz için işe yaramaz. Onları, columns özniteliğine yeni bir ad listesi atayarak değiştirin:
sensor_readings.columns = ["wind_speed", "temperature_c", "pressure_hpa"]
print(sensor_readings)

Bu yaklaşımla ilgili iki şey bilin.
-
Liste uzunluğu bire bir uyuşmalıdır. Dört sütunlu bir DataFrame’e üç ad geçirirseniz pandas
ValueError: Length mismatchhatası verir (bu hatayı ileride ayrıntılı işleyeceğiz). -
DataFrame’i yerinde değiştirir. Burada
inplaceparametresi yoktur çünkü atama işlemin kendisi değişikliktir. Taze bir kopya istiyorsanız önce.copy()kullanın ya da aşağıdaki.set_axis()’a başvurun.
Yöntem zincirleme için .set_axis() kullanmak
.set_axis() yöntemi aynı şeyi yapar ama yeni bir DataFrame döndürür; böylece diğer işlemlerle zincirleyebilirsiniz. Benzer, başlıksız bir DataFrame alın; bu kez fazladan ondalıklar ve eksik bir okuma gibi daha dağınık veriler olsun:
raw_sensor = pd.DataFrame([
[1.234, 22.567, 1013],
[1.512, 22.789, 1012],
[None, 22.601, 1013],
[1.345, 22.612, 1013]
])
sensor_clean = (
raw_sensor
.set_axis(["wind_speed_mps", "temp_celsius", "pressure_hpa"], axis=1)
.round(1)
.dropna()
)
print(sensor_clean)

axis=1 argümanı pandas’a sütun etiketlerini ayarladığınızı söyler (satır indeksini ayarlamak için axis=0 kullanın). .set_axis() yeni bir DataFrame döndürdüğü için gerçek ETL veya analiz kodlarında yazacağınız türden zincirli dönüşüm ardışık düzenlerine doğal olarak uyar. Üretimde doğrudan atamaya tercih edilmesinin ana nedeni budur.
Pandas’ta Fonksiyonlar Kullanarak Sütunların Adını Nasıl Değiştiririm?
Her eski adı yeniye eşlemek yerine, .rename()’e bir fonksiyon geçebilirsiniz; pandas bunu her sütun adına uygular. Listeniz değil, bir kuralınız olduğunda doğru araç budur. Örneğin “her şeyi küçük harfe çevir” ya da “her boşluğu alt çizgiyle değiştir.”
Yerleşik string fonksiyonlarını kullanmak
En basit durum, harf büyüklüğünü standartlaştırmadır. str.lower, str.upper veya str.title’ı doğrudan columns argümanına geçin:
import pandas as pd
orders = pd.DataFrame({
"Order ID": [1001, 1002, 1003],
"Customer Name": ["Abe", "Rick", "Pat"],
"Total Amount": [49.99, 120.00, 75.50]
})
orders_lower = orders.rename(columns=str.lower)
print(orders_lower.columns.tolist())
![]()
Burada fonksiyonun kendisini (str.lower) geçirdiğimize, onu çağırmadığımıza (str.lower()) dikkat edin. Pandas bunu her sütun adına tek tek uygular. Bu, harf büyüklüğü standardizasyonu için temiz bir kısayoldur ama boşlukları veya özel karakterleri ele almaz. Bunun için bir lambda ya da özel bir fonksiyon isteyeceksiniz.
Lambda ve özel fonksiyonları kullanmak
Harf büyüklüğü değişikliklerinin ötesindeki her şey için lambda, dönüşümü satır içinde ifade etmenin hızlı bir yolunu sunar. Lambdaları daha önce kullanmadıysanız, Python lambda fonksiyonları başlangıç rehberimiz iyi bir başlangıçtır.
Yaygın bir kalıp, tek adımda küçük harfe çevirme ve boşlukları alt çizgiyle değiştirmektir. Önceki örneği kullanıyoruz:
orders_snake = orders.rename(columns=lambda col: col.lower().replace(" ", "_"))
print(orders_snake.columns.tolist())
![]()
Mantık daha karmaşıklaştığında, onu adlı bir fonksiyona çıkarın. camelCase veya PascalCase sütun adlarını snake_case’e dönüştüren şu yardımcıyı düşünün:
import re
def to_snake_case(name: str) -> str:
"""Convert camelCase or PascalCase to snake_case."""
s1 = re.sub(r"(.)([A-Z][a-z]+)", r"\1_\2", name)
s2 = re.sub(r"([a-z0-9])([A-Z])", r"\1_\2", s1)
return s2.lower()
api_response = pd.DataFrame({
"userId": [1, 2, 3],
"firstName": ["Abe", "Rick", "Pat"],
"accountCreatedAt": ["2024-01-01", "2024-01-02", "2024-01-03"]
})
api_clean = api_response.rename(columns=to_snake_case)
print(api_clean.columns.tolist())
![]()
Bu tür adlı bir fonksiyon, zeki tek satırlıklardan daha kolay test edilir, not defterleri arasında yeniden kullanılabilir ve belgelenebilir. Mantık bir satıra sığıyorsa lambda; sığmıyorsa özel fonksiyon tercih edin.
Pandas’ta Dağınık Sütun Adlarını Toplu Hâlde Nasıl Temizlerim?
Veri elektronik tablolar, üçüncü taraf API’ler veya elle düzenlenmiş CSV’lerden geldiğinde, sütun adlarında yalnızca .rename() ile zarifçe çözülemeyecek sorunlar sık görülür. Şunlardan bahsediyorum:
- Sondaki boşluk
- Karışık harf büyüklüğü
- Parantezler
- Tireler
- Özel karakterler
- Görünmez Unicode karakterleri
Bu durumlar için en temiz yaklaşım, df.columns üzerinde doğrudan .str erişicisini kullanmaktır; bu, tek seferde tüm sütun adları üzerinde vektörleştirilmiş string metodlarını (regex dahil) sunar. Bu aynı zamanda sağlam Python’da veri temizleme temelleridir. Sütun adlarını temizlemek, sonraki tüm adımları (filtreleme, birleştirme, görselleştirme) daha az hataya açık hâle getirir.
Boşluk ve özel karakterleri kırpmak
Birçok elin değdiği bir Excel dışa aktarımından gelecek türde adlara sahip şu DataFrame’i ele alın:
import pandas as pd
raw_export = pd.DataFrame({
" Order ID ": [1001, 1002, 1003],
"Customer Name (Full)": ["Abe", "Rick", "Pat"],
"Total Amount ($)": [49.99, 120.00, 75.50],
"Order-Date": ["2024-03-12", "2024-03-15", "2024-03-18"]
})
print(raw_export.columns.tolist())
![]()
Ön ve son boşluklar en yaygın ve en sinir bozucu sorunlardır; çünkü görünmezler. Tek satırda kırpın:
raw_export.columns = raw_export.columns.str.strip()
print(raw_export.columns.tolist())
![]()
Özel karakterler için .str.replace() bir regex deseni kabul eder. Aşağıdaki desen harfleri, sayıları, alt çizgileri ve boşlukları tutar, diğer her şeyi atar:
raw_export.columns = raw_export.columns.str.replace(r"[^a-zA-Z0-9_ ]", "", regex=True)
print(raw_export.columns.tolist())
![]()
Tire, parantezler ve dolar işareti gitti. Dikkat edin, Total Amount artık sonda bir boşluk barındırıyor (önceden ($)’nin bulunduğu yerden) ve OrderDate tireyi tamamen kaybetti. İşte bu yüzden bir temizleme ardışık düzeninin sonunda yeniden kırpma yaparız.
snake_case’e standartlaştırma
Yaygın bir en iyi uygulama, analize başlamadan önce tüm sütun adlarını snake_case’e dönüştürmektir: küçük harf, alt çizgiyle ayrılmış sözcükler, özel karakter yok. .str metodlarını tek bir ifadede oraya varacak şekilde zincirleyin:
raw_export = pd.DataFrame({
" Order ID ": [1001, 1002, 1003],
"Customer Name (Full)": ["Abe", "Rick", "Pat"],
"Total Amount ($)": [49.99, 120.00, 75.50],
"Order-Date": ["2024-03-12", "2024-03-15", "2024-03-18"]
})
raw_export.columns = (
raw_export.columns
.str.strip() # baştaki/sondaki boşlukları kaldır
.str.lower() # her şeyi küçük harfe çevir
.str.replace(r"[^a-z0-9]+", "_", regex=True) # alfasayısal olmayanları alt çizgiye indirgeme
.str.strip("_") # baştaki/sondaki alt çizgileri kaldır
)
print(raw_export.columns.tolist())
![]()
Dört satır ve sütun adlarınız öngörülebilir, küçük harfli ve alt çizgiyle ayrılmış hâlde. Bu kalıbı bir yardımcı fonksiyon olarak kaydetmeye değer. Elinizde olduğunda kapıdan giren her dağınık DataFrame’e uygulayabilirsiniz.
Çoğu zaman yeniden adlandırmayı sütun kaldırmayla da birleştirmek isteyeceksiniz. Bunun için pandas’ta sütun düşürme eğitimi bir sonraki adımı kapsar.
Pandas’ta Veriyi Yüklerken Sütun Adlarını Nasıl Değiştiririm?
Dosyayı yüklemeden önce farklı sütun adları isteyeceğinizi zaten biliyorsanız, yeniden adlandırmayı doğrudan pd.read_csv() içinde yapabilirsiniz. names parametresine bir ad listesi geçin ve pandas’a mevcut başlık satırını atlayıp yerine sizin adlarınızı kullanmasını söylemek için header=0 ayarlayın:
import pandas as pd
from io import StringIO
# Gösterim için bir CSV dosyası simülasyonu
csv_data = """txnId,custId,amt,date
1001,C01,49.99,2024-01-15
1002,C02,125.00,2024-01-16
1003,C01,79.50,2024-01-17"""
# Orijinal başlığı atlayarak yükleme anında sütunları yeniden adlandırır
transactions = pd.read_csv(
StringIO(csv_data),
header=0,
names=["transaction_id", "customer_id", "amount_usd", "transaction_date"]
)
print(transactions)

Şemayı kontrol ettiğiniz ve yükleme kodunuzu bir .rename() adımıyla kalabalıklaştırmak istemediğinizde bu kullanışlı bir kestirmedir. Dosyada hiç başlık satırı yoksa header=0’ı atlayın ve baştan sütun adları atamak için sadece names=[...] kullanın. Yükleme seçeneklerine daha derin bakmak için pandas read_csv() eğitimini öneririm.
Bir uyarı: Bu, ya hep ya hiç yaklaşımıdır. names parametresi her sütun adını değiştirir; bu nedenle listenin uzunluğu dosyadaki sütun sayısıyla bire bir eşleşmelidir. Yalnızca birkaç sütunu yeniden adlandırmak istiyorsanız önce dosyayı yükleyin ve ardından .rename() kullanın.
Bu kalıpların diğer yaygın temizlik görevleriyle birlikte adım adım uygulamalı anlatımı için Cleaning Data in Python kursumuzu tavsiye ederim.
Polars ve Pandas’ta Sütunları Yeniden Adlandırma
Hem pandas hem de Polars ile çalışıyorsanız ya da çalışmayı umuyorsanız, her birinin sütun yeniden adlandırmayı nasıl ele aldığını bilmeye değer. Üst düzey API benzerdir; fakat ayrıntılar, ilk birkaç seferde sizi şaşırtacak şekilde ayrışır. Polars, modern veri yığınlarında giderek yaygınlaşan, hızlı, Rust destekli bir DataFrame kütüphanesidir ve pandas’ta edindiğiniz kas hafızası her zaman pürüzsüzce aktarılmaz.
Ana fikir aynıdır. Eski adları yeni adlara bir sözlükle eşlersiniz. Farklar ayrıntılardadır. Polars tasarım gereği değiştirilemezdir (inplace yoktur), yöntem zincirleme idomatiktir ve bir seçim sırasında sütun düzeyinde yeniden adlandırma, ayrı bir yeniden adlandırma adımı yerine .alias() kullanır.
Yan yana karşılaştırma
|
Görev |
Pandas |
Polars |
|
Belirli sütunları yeniden adlandır |
|
|
|
Tüm sütun adlarını değiştir |
|
|
|
Bir select sırasında yeniden adlandır |
Önce seç, sonra |
|
|
Yerinde değiştirme |
|
Desteklenmez. Her zaman yeni bir DataFrame döner |
|
İdomatik stil |
|
Daima zincirleme |
Aynı yeniden adlandırma, iki kütüphanede
Karşılaştırma için, iki kütüphanede de basit bir yeniden adlandırma örneği:
Pandas:
# Pandas
import pandas as pd
orders_pd = pd.DataFrame({
"ord_id": [1001, 1002, 1003],
"cust_nm": ["Abe", "Rick", "Pat"]
})
orders_pd = orders_pd.rename(columns={"ord_id": "order_id", "cust_nm": "customer_name"})
print(orders_pd)

Polars:
# Polars
import polars as pl
orders_pl = pl.DataFrame({
"ord_id": [1001, 1002, 1003],
"cust_nm": ["Abe", "Rick", "Pat"]
})
orders_pl = orders_pl.rename({"ord_id": "order_id", "cust_nm": "customer_name"})
print(orders_pl)

Dikkat edilecek iki küçük fark. Polars’ın .rename()’i sözlüğü doğrudan alır. columns= anahtar sözcüğü yoktur çünkü Polars yalnızca sütunların yeniden adlandırılmasını destekler (satır indeksi yok). Ve sonucu yeniden atamak zorundasınız. Polars’ta inplace=True yoktur. Her işlem yeni bir DataFrame döndürür.
Polars çıktısı ayrıca veri tiplerini satır içinde (i64, str) ve üstte şekli gösterir; bu da geçtiğinizde insanların genelde sevdiği küçük yaşam kalitesi şeylerinden biridir.
Bir select sırasında sütunları yeniden adlandırma
Bir dönüşüm sırasında yeniden adlandırma için, Polars .select() veya .with_columns() içinde .alias() kullanır:
# Polars
import polars as pl
orders_pl = pl.DataFrame({
"ord_id": [1001, 1002, 1003],
"cust_nm": ["Abe", "Rick", "Pat"]
})
# Tek ifadede seç ve yeniden adlandır
renamed = orders_pl.select(
pl.col("ord_id").alias("order_id"),
pl.col("cust_nm").alias("customer_name")
)
print(renamed)

pandas’ta eşdeğeri, bir sütun seçiminden sonra .rename() olurdu. Hiçbiri daha iyi değildir. Her ikisi de kütüphanelerin tasarım felsefesini yansıtır.
İki kütüphanenin daha derin bir karşılaştırmasını isterseniz pandas ve polars performans eğitimini tavsiye ederim. Ve polars’ı araç setinize eklemek isterseniz Introduction to Polars kursumuzu öneririm.
Yaygın Hatalar ve Çözümleri
pandas sütunlarını yeniden adlandırırken iki hata tekrar tekrar karşımıza çıkar. Nasıl göründükleri, neden oldukları ve nasıl düzeltileceği aşağıda.
KeyError: sütun adı bulunamadı
Varsayılan olarak .rename(), mevcut bir sütunla eşleşmeyen anahtarları sessizce yok sayar. Ancak yazım hatalarını yakalamak için errors='raise' geçirirseniz, anahtar yoksa bir KeyError alırsınız:
import pandas as pd
orders = pd.DataFrame({
"order_id": [1001, 1002, 1003],
"customer_name": ["Abe", "Rick", "Pat"]
})
# Bu bir hata verir
orders.rename(columns={"Order_ID": "order_id"}, errors="raise")
![]()
En yaygın neden, harf büyüklüğü duyarlılığındaki bir kaymadır (Order_ID ile order_id) veya görünmez sondaki bir boşluk ("order_id " ile "order_id"). Bir KeyError’a çarptığınızda sırasıyla üç şeyi kontrol edin:
- Kesin yazım ve harf büyüklüğü
- Gizli boşluklar
- Sütunun daha önce zaten yeniden adlandırılıp adlandırılmadığı
Gerçek sütun adlarını doğrulamak için:
print(orders.columns.tolist())
# Alternatif olarak repr() kullanın
print([repr(c) for c in orders.columns])
![]()
Pandas’ın elinde tuttuğu tam dizeleri gördüğünüzde yazım hatası genelde barizdir. Ardından yazımı düzeltin ve yeniden çalıştırın:
orders = orders.rename(columns={"order_id": "Order_ID"}, errors="raise")
print(orders.columns.tolist())
![]()
Şimdi soru şu: Ne zaman errors='raise', ne zaman varsayılan errors='ignore' kullanılmalı?
-
Varsayılan hoşgörülüdür. Şemaları değişken DataFrame’leri işleyen ve eksik bir sütunun hiçbir şeyi çökertmemesi gereken betiklerde kullanışlıdır.
-
Özellikle sessiz hataların saatlerce kafa karışıklığına yol açtığı not defterlerinde, yazım hatalarının geliştirme sırasında yüksek sesle ortaya çıkmasını istediğinizde
errors='raise'’a geçin.
ValueError: df.columns ile uzunluk uyumsuzluğu
Bir listeyi df.columns’a atadığınızda veya .set_axis() kullandığınızda, listenin uzunluğu sütun sayısıyla bire bir eşleşmelidir. Eşleşmezse pandas bir ValueError verir:
import pandas as pd
products = pd.DataFrame({
"sku": ["A100", "A101", "A102"],
"name": ["Widget", "Gadget", "Gizmo"],
"price": [9.99, 14.99, 19.99]
})
# Bu bir hata verir
products.columns = ["product_sku", "product_name"]
![]()
DataFrame’in üç sütunu var ama yalnızca iki yeni ad sağlandı. Çözüm, atama yapmadan önce sütun sayısını kontrol etmektir:
print(len(products.columns))
products.columns = ["product_sku", "product_name", "product_price"]
print(products.columns.tolist())
![]()
Sütun sayısının değişebildiği DataFrame’lerle çalışıyorsanız, bir sözlükle .rename() kullanmak daha güvenlidir. Yalnızca adını verdiğiniz sütunlara dokunur; eksik ya da fazladan bir sütun kodunuzu çökertmez.
Son Düşünceler
pandas’ta sütunları yeniden adlandırmak, görevinizin kapsamına uyan yöntemi seçmeye dayanır. Hangi yaklaşıma başvurursanız başvurun, en büyük pratik kazanım tek bir adlandırma kuralında karar kılmak ve her analizin ilk adımında bunu uygulamaktır. Python kodlarının çoğunda snake_case kullanılır. Temiz sütun adları başta birkaç saniyeye mal olur ama projenin geri kalanında sizi KeyError sürprizlerinden korur.
.rename()’i hedefli yeniden adlandırmalar için sözlükle kullanın. Her sütunun yeni bir ada ihtiyacı olduğunda, df.columns’a atama yapmak veya .set_axis() kullanmak, her eski-yeni eşlemesini içeren bir sözlük kurmaktan daha hızlıdır. Ve eğer yeniden adlandırma boşluk kırpma, her şeyi küçültme, camelCase dönüştürme gibi bir kurala uyuyorsa, bir fonksiyon geçirmek ya da .str erişicisini kullanmak, durumları tek tek saymak yerine kuralı bir kez ifade etmenizi sağlar. Polars benzer bir API ile aynı işi halleder; ancak değiştirilemez, zincir-öncelikli tarzı sizi farklı alışkanlıklara yöneltir.
DataFrame becerilerinizi geliştirmeye devam etmek için bir sonraki adım olarak Data Manipulation with pandas kursunu öneririm. Yapılandırılmış bir öğrenme yolu isterseniz, Data Analyst in Python kariyer yolu DataFrame manipülasyonunu analist araç takımıyla birlikte kapsar.
Pandas’ta Sütunları Yeniden Adlandırma Hakkında SSS
pandas'ta bir sütunun adını nasıl değiştiririm?
Birden fazla yöntem vardır, ancak en basit olanı df = df.rename(columns={"old_name": "new_name"}) kullanmaktır. DataFrame'i doğrudan değiştirmek için inplace=True argümanını da geçebilirsiniz.
pandas'ta birden çok sütunu nasıl yeniden adlandırırım?
pandas'ta birden çok sütunun adını değiştirmek için tüm yeniden adları tek bir sözlükte geçin: df.rename(columns={"old1": "new1", "old2": "new2"})
Bir pandas DataFrame'indeki tüm sütunların adını nasıl değiştiririm?
df.columns'a yeni adlardan oluşan bir liste atayın. Dikkat: Liste uzunluğunun sütun sayısıyla eşleştiğinden emin olun; aksi hâlde bir ValueError alırsınız.
Neden df.rename() DataFrame'imi değiştirmiyor?
Varsayılan olarak .rename() yeni bir DataFrame döndürür. Sonucu df = df.rename(...) ile geri atayın ya da inplace=True kullanın.
pandas'ta sütun adlarını küçük harfe nasıl çeviririm?
Tüm sütun adlarını tek adımda küçük harfe çevirmek için df.columns = df.columns.str.lower() kullanın.
Ben bir veri bilimi içerik yazarıyım. YZ/ML/DS konuları etrafında içerik üretmeyi seviyorum. Ayrıca yeni YZ araçlarını keşfediyor ve onlar hakkında yazıyorum.
