Menu
CoddyTech

Pandas Cheat Sheet (Hile Sayfası)

Son güncelleme

DataFrame oluşturma

Örnekler, testler ve küçük referans tabloları için elle kurulan küçük DataFrame'ler.

İşlemKod
pandas ve NumPy'ı içe aktarimport pandas as pd import numpy as np
Sütunlardan oluşan bir dict'tendf = pd.DataFrame({"name": ["Ada", "Ben"], "age": [36, 28]})
Satır listesindenpd.DataFrame([{"name": "Ada", "age": 36}, {"name": "Ben", "age": 28}])
NumPy dizisindenpd.DataFrame(np.arange(6).reshape(3, 2), columns=["x", "y"])
Etiketli bir Seriess = pd.Series([3, 5, 2], index=["a", "b", "c"])
Tarih aralığıpd.date_range("2026-01-01", periods=7, freq="D")

Dosya okuma ve yazma

Tek bir çağrı dosyayı DataFrame'e yükler, tek bir çağrı da geri yazar.

İşlemKod
CSV dosyası okudf = pd.read_csv("sales.csv")
Yalnızca bazı sütunlar, gerçek tarihlerlepd.read_csv("sales.csv", usecols=["date", "city", "sales"], parse_dates=["date"])
Bir sütunu indeks yappd.read_csv("sales.csv", index_col="id")
Sekme ya da başka ayırıcıpd.read_csv("sales.tsv", sep="\t")
Ek işaretleri eksik saypd.read_csv("sales.csv", na_values=["n/a", "-"])
Yalnızca ilk satırları okupd.read_csv("sales.csv", nrows=1000)
Excel sayfası oku (openpyxl gerekir)pd.read_excel("report.xlsx", sheet_name="2026")
JSON kayıtlarını okupd.read_json("records.json")
SQL veritabanından okupd.read_sql("SELECT * FROM orders", conn)
İndekssiz CSV yazdf.to_csv("clean.csv", index=False)
Excel ya da Parquet yazdf.to_excel("clean.xlsx", index=False), df.to_parquet("clean.parquet")

Veriyi incele

Her yeni veri setinde ilk yapacağın çağrılar.

İşlemKod
İlk ve son satırlardf.head(), df.tail(3)
Satır ve sütun sayısıdf.shape # (6, 7)
Sütun tipleri ve dolu değer sayılarıdf.info()
Sayısal sütunların özet istatistikleridf.describe()
Tüm sütunların özetidf.describe(include="all")
Sütun adları ve tipleridf.columns, df.dtypes
Her değerin sayısıdf["city"].value_counts()
Her değerin oranıdf["city"].value_counts(normalize=True)
Benzersiz değerler ve sayısıdf["city"].unique(), df["city"].nunique()
Sütun başına eksik değerlerdf.isna().sum()
Rastgele satır örneğidf.sample(3, random_state=0)
Sayısal sütunların korelasyonudf.corr(numeric_only=True)

Sütun ve satır seçme

loc etikete göre seçer ve dilimin sonunu dahil eder. iloc konuma göre seçer ve sonu dahil etmez.

İşlemKod
Tek sütun, Series olarakdf["age"]
Birkaç sütun, DataFrame olarakdf[["name", "age"]]
Etikete göre satır ve sütundf.loc[0:2, ["name", "age"]]
Konuma göre satır ve sütundf.iloc[0:2, 0:3]
Tek bir değerdf.at[0, "age"], df.iat[0, 3]
Son satırdf.iloc[-1]
Belirli tipteki sütunlardf.select_dtypes(include="number")
Metin sütunları (pandas 3)df.select_dtypes(include="str")
Ada göre eşleşen sütunlardf.filter(like="sal"), df.filter(regex="^(age|salary)$")
Satırları bir sütuna göre buldf.set_index("name").loc["Ada", "salary"]
0, 1, 2 indeksine geri döndf.reset_index(drop=True)
Sütun ya da satır sildf.drop(columns=["email"]), df.drop(index=[0, 1])

Satır filtreleme

Her koşulu paranteze al ve & (ve), | (veya) ve ~ (değil) ile birleştir.

İşlemKod
Koşula uyan satırlardf[df["age"] > 30]
İki koşul birdendf[(df["age"] > 30) & (df["city"] == "Oslo")]
Koşullardan biridf[(df["city"] == "Oslo") | (df["salary"] > 6000)]
Değer listededf[df["city"].isin(["Oslo", "Rome"])]
Değer listede değildf[~df["city"].isin(["Oslo", "Rome"])]
İki değer arası, uçlar dahildf[df["age"].between(30, 40)]
Sorgu metniyle filtreledf.query("age > 30 and city == 'Oslo'")
Sorguda değişken kullanmin_age = 30 df.query("age > @min_age")
Metin içerirdf[df["name"].str.contains("e", case=False)]
Eksik ya da dolu değerlerdf[df["age"].isna()], df[df["age"].notna()]
Satır filtrele, sütun seçdf.loc[df["age"] > 30, ["name", "salary"]]
En büyük ya da en küçük n satırdf.nlargest(3, "salary"), df.nsmallest(2, "age")
Tekrarlanan değere sahip satırlardf[df.duplicated(subset=["city"], keep=False)]

Sıralama ve derecelendirme

İşlemKod
Bir sütuna göre sıraladf.sort_values("salary")
Büyükten küçüğedf.sort_values("salary", ascending=False)
Birkaç sütuna göre sıraladf.sort_values(["city", "salary"], ascending=[True, False])
Eksik değerler baştadf.sort_values("age", na_position="first")
İndekse göre sıraladf.sort_index()
Değerleri derecelendir, 1 en yüksekdf["salary"].rank(ascending=False)

Sütun ekleme ve değiştirme

Tüm sütun üzerinde çalışan işlemler hızlıdır. apply yalnızca hazır bir metot işi görmediğinde kullan.

İşlemKod
Diğer sütunlardan yeni sütundf["bonus"] = df["salary"] * 0.1
Zincir içinde sütun ekledf.assign(bonus=lambda d: d["salary"] * 0.1)
Koşula göre değerdf["level"] = np.where(df["age"] >= 40, "senior", "junior")
Birkaç koşula göre değerdf["band"] = np.select([df["age"] < 30, df["age"] < 45], ["young", "mid"], default="senior")
Koşul sağlanan yerde değeri değiştirdf.loc[df["city"] == "Lima", "salary"] = 4000
Değerleri dict ile eşledf["country"] = df["city"].map({"Oslo": "NO", "Rome": "IT", "Lima": "PE"})
Sütuna fonksiyon uyguladf["salary"].apply(lambda x: round(x, -3))
Her hücreye fonksiyon uyguladf[["age", "salary"]].map(lambda x: x / 1000)
Sütunları yeniden adlandırdf.rename(columns={"salary": "pay"})
Sütun tipini değiştirdf["salary"].astype("float64")
Metni sayıya çevir, hatalılar NaN olsunpd.to_numeric(s, errors="coerce")
Sayıları etiketli aralıklara bölpd.cut(df["age"], bins=[0, 30, 45, 120], labels=["young", "mid", "senior"])
Sayıları eşit büyüklükte gruplara bölpd.qcut(df["salary"], q=4, labels=False)
Satırlar üzerinde döngü (yavaş, son çare)for row in df.itertuples(): print(row.name, row.salary)

Eksik değerler ve temizlik

Eksik sayılar NaN, eksik tarihler NaT olarak görünür. Bu çağrıların her biri yeni bir nesne döndürür, bu yüzden sonucu bir değişkene ata.

İşlemKod
Sütun başına eksik değer oranıdf.isna().mean()
Eksik değeri olan satırları sildf.dropna()
Anahtar sütunu boş satırları sildf.dropna(subset=["age"])
Sütun başına bir değerle doldurdf.fillna({"age": df["age"].median()})
Önceki ya da sonraki satırdan doldurdf["age"].ffill(), df["age"].bfill()
Boşlukları interpolasyonla doldurdf["age"].interpolate()
İşaretleri eksik değere çevirdf.replace(["n/a", "-", ""], np.nan)
Tekrarlanan satırları sildf.drop_duplicates()
Her anahtar için son satırı tutdf.drop_duplicates(subset=["city"], keep="last")
Sütun adlarını düzenledf.columns = df.columns.str.strip().str.lower().str.replace(" ", "_")
Uç değerleri sınırladf["salary"].clip(lower=4000, upper=6000)
Tekrarlanan metin için category tipidf["city"] = df["city"].astype("category")

Metin sütunları (.str)

pandas 3'te metin sütunları varsayılan olarak str dtype'ını alır. .str metotları tüm sütun üzerinde çalışır ve eksik değerler eksik kalır.

İşlemKod
Büyük, küçük ya da baş harfi büyükdf["name"].str.upper(), df["name"].str.lower(), df["name"].str.title()
Boşlukları kırpdf["name"].str.strip()
Metni değiştirdf["email"].str.replace("mail.com", "example.com")
Regex ile değiştirdf["email"].str.replace(r"@.*", "", regex=True)
İçerir, ile başlardf["name"].str.contains("a"), df["name"].str.startswith("E")
Her değerin uzunluğudf["name"].str.len()
İlk karakterlerdf["name"].str[:2]
Sütunlara böldf["email"].str.split("@", expand=True)
Regex grubuyla çıkardf["email"].str.extract(r"@(\w+)")
Metin sütunlarını birleştirdf["name"] + " (" + df["city"] + ")"
Sayıları sıfırla doldurdf["salary"].astype("str").str.zfill(6)
Yeni metin dtype'ıdf["name"].dtype # str

Tarih ve saat

.dt erişimcisi datetime sütunlarında çalışır. Sıralı bir tarih indeksi (aşağıdaki ts) metinle dilimlemeyi ve yeniden örneklemeyi mümkün kılar.

İşlemKod
Sütunu datetime'a çevirdf["date"] = pd.to_datetime(df["date"])
Kesin formatla çevirpd.to_datetime(["03/01/2026", "15/01/2026"], format="%d/%m/%Y")
Yıl, ay, gün adıdf["date"].dt.year, df["date"].dt.month, df["date"].dt.day_name()
Tarihleri aya göre grupladf["date"].dt.to_period("M")
İki tarih arasındaki gün(pd.Timestamp("2026-12-31") - df["date"]).dt.days
Gün ya da ay ekledf["date"] + pd.Timedelta(days=30), df["date"] + pd.DateOffset(months=1)
Tarih aralığındaki satırlardf[df["date"].between("2021-01-01", "2022-12-31")]
Tarih indeksi, metinle dilimlemets = df.set_index("date").sort_index() ts.loc["2021":"2022"]
Aylık toplamts["salary"].resample("ME").sum()
Haftalık ortalama; "QE" çeyreklik, "YE" yıllıkts["salary"].resample("W").mean()
Hareketli ortalamats["salary"].rolling(3).mean()
Önceki satıra göre değişimts["salary"].diff(), ts["salary"].pct_change()
Değerleri bir satır aşağı kaydırts["salary"].shift(1)
Kümülatif toplamts["salary"].cumsum()
Saat dilimi ata ve dönüştürts.index.tz_localize("UTC").tz_convert("Europe/Oslo")

Gruplama ve toplama

groupby satırları anahtara göre ayırır, her gruba bir fonksiyon uygular ve sonuçları birleştirir.

İşlemKod
Grup başına ortalamadf.groupby("city")["salary"].mean()
Aynı anda birkaç istatistikdf.groupby("city")["salary"].agg(["mean", "max", "count"])
Adlandırılmış sonuç sütunlarıdf.groupby("city").agg(avg_pay=("salary", "mean"), people=("name", "count"))
İki sütuna göre grupladf.groupby(["city", "team"])["salary"].sum()
Anahtarları sütun olarak tutdf.groupby("city", as_index=False)["salary"].mean()
Grup başına satır sayısıdf.groupby("city").size()
Grup sonucunu her satıra yazdf["city_avg"] = df.groupby("city")["salary"].transform("mean")
Yalnızca bazı grupları tutdf.groupby("city").filter(lambda g: len(g) >= 2)
Her grupta en büyük değerli satırdf.loc[df.groupby("city")["salary"].idxmax()]
Her grupta ilk n satırdf.sort_values("salary", ascending=False).groupby("city").head(2)
Her grupta satırları numaraladf.groupby("city").cumcount()
Gruplar üzerinde döngüfor city, group in df.groupby("city"): print(city, len(group))
Tek zincirde filtrele, grupla, sırala(df.query("age > 30") .groupby("city", as_index=False) .agg(avg_pay=("salary", "mean")) .sort_values("avg_pay", ascending=False))

Pivot ve yeniden şekillendirme

Uzun veride her gözlem bir satırdır. Geniş veri ise bir değişkeni sütunlara yayar.

İşlemKod
Pivot tablodf.pivot_table(index="city", columns="team", values="salary", aggfunc="mean", fill_value=0)
Toplamlı pivot tablodf.pivot_table(index="city", values="salary", aggfunc="sum", margins=True)
Kombinasyonları saypd.crosstab(df["city"], df["team"])
Satır başına oranlarpd.crosstab(df["city"], df["team"], normalize="index")
Genişten uzunalong = df.melt(id_vars="name", value_vars=["age", "salary"], var_name="field", value_name="value")
Uzundan genişelong.pivot(index="name", columns="field", values="value")
İç indeks seviyesini sütunlara taşıdf.groupby(["city", "team"])["salary"].sum().unstack(fill_value=0)
Liste elemanı başına bir satırpd.DataFrame({"id": [1, 2], "tags": [["a", "b"], ["c"]]}).explode("tags")
Sütunu one-hot encode etpd.get_dummies(df["team"], prefix="team")
Satır ve sütunların yerini değiştirdf.T

DataFrame birleştirme

concat tabloları üst üste ya da yan yana ekler, merge ise onları SQL'deki gibi anahtar sütunlar üzerinden join eder.

İşlemKod
Satırları alt alta eklepd.concat([df_2025, df_2026], ignore_index=True)
Yan yana koypd.concat([left, right], axis=1)
Anahtar sütunla joinorders.merge(customers, on="customer_id", how="left")
Join türlerihow="inner", "left", "right", "outer"
Farklı adlı anahtarlarorders.merge(users, left_on="customer_id", right_on="id")
Join'i doğrula, her satırın kaynağını işaretleorders.merge(customers, on="customer_id", how="left", validate="many_to_one", indicator=True)
İndeks üzerinden joinleft.join(right, how="inner")
Diğer tabloda eşi olmayan satırlarorders[~orders["customer_id"].isin(customers["customer_id"])]

pandas ile grafik

pandas çizimi Matplotlib ile yapar. Her grafik çağrısı bir Matplotlib ax nesnesi döndürür, böylece biçimlendirmeye devam edebilirsin.

İşlemKod
Series'in çizgi grafiğits["salary"].plot()
İki sütundan çizgi grafiğidf.plot(x="date", y="salary")
Özetin çubuk grafiğidf.groupby("city")["salary"].mean().plot.bar()
Sıralı yatay çubuklardf["city"].value_counts().sort_values().plot.barh()
Histogramdf["salary"].plot.hist(bins=20)
Dağılım grafiğidf.plot.scatter(x="age", y="salary")
Grup başına kutu grafiğidf.boxplot(column="salary", by="city")
Başlık ve eksen etiketiax = df.plot(x="date", y="salary", title="Salary") ax.set_ylabel("EUR")
Grafiği göster ya da kaydetplt.show(), ax.figure.savefig("salary.png", dpi=150)

pandas 3: eski kullanımlar ve yerine yazman gerekenler

Eski eğitimlerden kopyalanan kod pandas 3'te sıkça hata ya da uyarı verir. Onun yerine pandas 3 sütunundaki kullanımları yaz.

İşlempandas 3Eski kullanım
Her hücreye fonksiyondf.map(f)df.applymap(f)
Önceki satırdan doldurdf.ffill()df.fillna(method="ffill")
Satır eklepd.concat([df, new_rows])df.append(new_rows)
Ay sonuna göre yeniden örneklemets["salary"].resample("ME").sum()resample("M")
Saatlik tarihlerpd.date_range("2026-01-01", periods=24, freq="h")freq="H"
Tek bir değer atadf.loc[0, "age"] = 37df["age"][0] = 37
Filtrelenmiş alt kümeyi değiştirhigh = df[df["salary"] > 5000] high["salary"] = 0high = df[df["salary"] > 5000].copy()
Bu bir metin sütunu mu?df["name"].dtype == "str"df["name"].dtype == object

Bir veri analistinin her gün başvurduğu pandas kodları, işe göre gruplanmış hâlde: veri oluşturma ve yükleme, veriyi inceleme, satır seçme ve filtreleme, sütun ekleme, eksik değerleri temizleme, metin ve tarihlerle çalışma, gruplama ve toplama, yeniden şekillendirme, birleştirme ve grafik çizme. Her satırda yapıştırabileceğin kısa bir kod parçası ve ne yaptığını anlatan tek bir cümle var.

Buradaki her şey Coddy'nin kullandığı sürüm olan pandas 3 için yazıldı: metin sütunları yeni str dtype'ını kullanır, Copy-on-Write her zaman açıktır, applymap ve fillna(method=...) gibi kaldırılan API'ler yalnızca eski kullanımlar tablosunda yer alır. Örnekler name, city, team, age, salary, date ve email sütunlarına sahip bir df DataFrame'i kullanır. Python'a yeni mi başlıyorsun? Önce Python hile sayfası ve Python playground ile başla, NumPy, Matplotlib ve scikit-learn hile sayfalarını da bunun yanında açık tut.

pandas hile sayfası hakkında sık sorulan sorular

Bu pandas hile sayfası ücretsiz mi?
Evet. Bu pandas hile sayfası tamamen ücretsiz ve kayıt gerektirmez. Yer imlerine ekle ya da tarayıcından PDF olarak yazdır; bir groupby, merge ya da pivot tablo için tam çağrıya ihtiyacın olduğunda geri gel.
Bu hile sayfası hangi pandas sürümünü kapsıyor?
pandas 3. Metin sütunları yeni str dtype'ını kullanır, Copy-on-Write her zaman açıktır ve pandas 3'te kaldırılan çağrılar (applymap, fillna(method=...), append, M ve H frekans takma adları) yalnızca son tabloda, yerine yazman gerekenlerin yanında yer alır. str dtype'ına ya da Copy-on-Write'a dayanan satırlar dışında neredeyse her kod parçası pandas 2.2'de de çalışır.
loc ile iloc arasındaki fark nedir?
loc etikete, yani indeks değerlerine ve sütun adlarına göre seçer; df.loc[0:2] gibi bir dilim sonunu da dahil eder. iloc ise bir Python listesi gibi tam sayı konumuna göre seçer, bu yüzden df.iloc[0:2] ilk iki satırı döndürür ve sonu dahil etmez. Satırları filtreleyip sütunları tek adımda seçmek için loc ile bir koşul kullan: df.loc[df["age"] > 30, ["name"]].
Bir DataFrame'i birkaç koşula göre nasıl filtrelerim?
Her koşulu paranteze al ve ve için &, veya için |, değil için ~ ile birleştir: df[(df["age"] > 30) & (df["city"] == "Oslo")]. Python'un and ve or operatörleri tüm sütunlar üzerinde çalışmaz. Uzun filtrelerde df.query("age > 30 and city == 'Oslo'") daha kolay okunur.
merge, join ve concat arasındaki fark nedir?
merge iki DataFrame'i bir SQL join gibi anahtar sütunlar üzerinden birleştirir; how="inner", "left", "right" ya da "outer" seçeneklerini alır. join indeks üzerinden merge yapan bir kısayoldur. concat ise anahtar eşleştirmez: tabloları üst üste ya da axis=1 ile yan yana ekler.
Atamam neden DataFrame'i değiştirmiyor?
pandas 3'ten beri Copy-on-Write sayesinde her seçim bir kopya gibi davranır. df["age"][0] = 37 gibi zincirleme atama geçici bir nesneyi değiştirir ve df olduğu gibi kalır. Bunun yerine tek bir loc çağrısıyla yaz: df.loc[0, "age"] = 37. dropna ve fillna gibi metotlar da yeni bir nesne döndürür, bu yüzden sonucu bir değişkene ata.
pandas kodunu online çalıştırabilir miyim?
Evet. Ücretsiz Matplotlib playground, Python'u pandas, NumPy, Matplotlib ve scikit-learn ile birlikte tarayıcında çalıştırır; bu hile sayfasındaki herhangi bir kod parçasını yapıştırıp hiçbir şey kurmadan çalıştırabilirsin. Coddy'nin Machine Learning kursu, ilk DataFrame'inden bir modeli besleyen veriye kadar pandas'ı adım adım öğretir.
Coddy programlama dilleri çizimi

Coddy ile Pandas öğren

BAŞLA