Menu
CoddyTech

Cheat Sheet Pandas

Terakhir diperbarui

Membuat DataFrame

DataFrame kecil yang dibuat manual, untuk contoh, pengujian, dan tabel acuan.

TugasKode
Mengimpor pandas dan NumPyimport pandas as pd import numpy as np
Dari dict berisi kolomdf = pd.DataFrame({"name": ["Ada", "Ben"], "age": [36, 28]})
Dari list berisi barispd.DataFrame([{"name": "Ada", "age": 36}, {"name": "Ben", "age": 28}])
Dari array NumPypd.DataFrame(np.arange(6).reshape(3, 2), columns=["x", "y"])
Series dengan labels = pd.Series([3, 5, 2], index=["a", "b", "c"])
Rentang tanggalpd.date_range("2026-01-01", periods=7, freq="D")

Membaca dan menulis file

Satu pemanggilan memuat file ke DataFrame, dan satu pemanggilan menulisnya kembali.

TugasKode
Membaca file CSVdf = pd.read_csv("sales.csv")
Hanya kolom tertentu, dengan tanggal yang sebenarnyapd.read_csv("sales.csv", usecols=["date", "city", "sales"], parse_dates=["date"])
Memakai sebuah kolom sebagai indexpd.read_csv("sales.csv", index_col="id")
Pemisah tab atau lainnyapd.read_csv("sales.tsv", sep="\t")
Menganggap penanda tambahan sebagai nilai hilangpd.read_csv("sales.csv", na_values=["n/a", "-"])
Hanya membaca baris-baris pertamapd.read_csv("sales.csv", nrows=1000)
Membaca sheet Excel (butuh openpyxl)pd.read_excel("report.xlsx", sheet_name="2026")
Membaca record JSONpd.read_json("records.json")
Membaca dari database SQLpd.read_sql("SELECT * FROM orders", conn)
Menulis CSV tanpa indexdf.to_csv("clean.csv", index=False)
Menulis Excel atau Parquetdf.to_excel("clean.xlsx", index=False), df.to_parquet("clean.parquet")

Memeriksa data

Pemanggilan pertama yang dilakukan pada dataset baru mana pun.

TugasKode
Baris pertama dan terakhirdf.head(), df.tail(3)
Jumlah baris dan kolomdf.shape # (6, 7)
Tipe kolom dan jumlah nilai yang tidak kosongdf.info()
Statistik ringkasan kolom numerikdf.describe()
Ringkasan setiap kolomdf.describe(include="all")
Nama dan tipe kolomdf.columns, df.dtypes
Menghitung setiap nilaidf["city"].value_counts()
Porsi setiap nilaidf["city"].value_counts(normalize=True)
Nilai unik dan jumlahnyadf["city"].unique(), df["city"].nunique()
Nilai hilang per kolomdf.isna().sum()
Sampel baris acakdf.sample(3, random_state=0)
Korelasi kolom numerikdf.corr(numeric_only=True)

Memilih kolom dan baris

loc memilih berdasarkan label dan menyertakan ujung slice. iloc memilih berdasarkan posisi dan tidak menyertakannya.

TugasKode
Satu kolom, sebagai Seriesdf["age"]
Beberapa kolom, sebagai DataFramedf[["name", "age"]]
Baris dan kolom berdasarkan labeldf.loc[0:2, ["name", "age"]]
Baris dan kolom berdasarkan posisidf.iloc[0:2, 0:3]
Satu nilaidf.at[0, "age"], df.iat[0, 3]
Baris terakhirdf.iloc[-1]
Kolom dengan satu tipedf.select_dtypes(include="number")
Kolom teks (pandas 3)df.select_dtypes(include="str")
Kolom berdasarkan kecocokan namadf.filter(like="sal"), df.filter(regex="^(age|salary)$")
Mencari baris berdasarkan sebuah kolomdf.set_index("name").loc["Ada", "salary"]
Kembali ke index 0, 1, 2df.reset_index(drop=True)
Membuang kolom atau barisdf.drop(columns=["email"]), df.drop(index=[0, 1])

Menyaring baris

Bungkus setiap kondisi dengan tanda kurung lalu gabungkan dengan & (dan), | (atau), dan ~ (bukan).

TugasKode
Baris yang memenuhi kondisidf[df["age"] > 30]
Kedua kondisidf[(df["age"] > 30) & (df["city"] == "Oslo")]
Salah satu kondisidf[(df["city"] == "Oslo") | (df["salary"] > 6000)]
Nilai ada di dalam listdf[df["city"].isin(["Oslo", "Rome"])]
Nilai tidak ada di dalam listdf[~df["city"].isin(["Oslo", "Rome"])]
Di antara dua nilai, ujungnya termasukdf[df["age"].between(30, 40)]
Menyaring dengan string querydf.query("age > 30 and city == 'Oslo'")
Memakai variabel di dalam querymin_age = 30 df.query("age > @min_age")
Teks mengandungdf[df["name"].str.contains("e", case=False)]
Nilai hilang atau adadf[df["age"].isna()], df[df["age"].notna()]
Menyaring baris dan memilih kolomdf.loc[df["age"] > 30, ["name", "salary"]]
n baris teratas atau terbawahdf.nlargest(3, "salary"), df.nsmallest(2, "age")
Baris dengan nilai yang berulangdf[df.duplicated(subset=["city"], keep=False)]

Mengurutkan dan memberi peringkat

TugasKode
Mengurutkan berdasarkan kolomdf.sort_values("salary")
Terbesar lebih duludf.sort_values("salary", ascending=False)
Mengurutkan berdasarkan beberapa kolomdf.sort_values(["city", "salary"], ascending=[True, False])
Nilai hilang lebih duludf.sort_values("age", na_position="first")
Mengurutkan berdasarkan indexdf.sort_index()
Memberi peringkat, 1 adalah yang tertinggidf["salary"].rank(ascending=False)

Menambah dan mengubah kolom

Operasi pada seluruh kolom berjalan cepat. Pakai apply hanya jika tidak ada method bawaan yang bisa melakukannya.

TugasKode
Kolom baru dari kolom laindf["bonus"] = df["salary"] * 0.1
Menambah kolom di dalam rangkaian (chain)df.assign(bonus=lambda d: d["salary"] * 0.1)
Nilai berdasarkan kondisidf["level"] = np.where(df["age"] >= 40, "senior", "junior")
Nilai berdasarkan beberapa kondisidf["band"] = np.select([df["age"] < 30, df["age"] < 45], ["young", "mid"], default="senior")
Mengubah nilai saat kondisi terpenuhidf.loc[df["city"] == "Lima", "salary"] = 4000
Memetakan nilai dengan dictdf["country"] = df["city"].map({"Oslo": "NO", "Rome": "IT", "Lima": "PE"})
Menerapkan fungsi pada kolomdf["salary"].apply(lambda x: round(x, -3))
Menerapkan fungsi pada setiap seldf[["age", "salary"]].map(lambda x: x / 1000)
Mengganti nama kolomdf.rename(columns={"salary": "pay"})
Mengubah tipe kolomdf["salary"].astype("float64")
Teks menjadi angka, nilai tidak valid menjadi NaNpd.to_numeric(s, errors="coerce")
Angka ke dalam kelompok berlabelpd.cut(df["age"], bins=[0, 30, 45, 120], labels=["young", "mid", "senior"])
Angka ke dalam kelompok berukuran samapd.qcut(df["salary"], q=4, labels=False)
Perulangan atas baris (lambat, pilihan terakhir)for row in df.itertuples(): print(row.name, row.salary)

Nilai hilang dan pembersihan

Angka yang hilang tampil sebagai NaN, tanggal yang hilang sebagai NaT. Setiap pemanggilan ini mengembalikan object baru, jadi simpan hasilnya.

TugasKode
Porsi nilai hilang per kolomdf.isna().mean()
Membuang baris yang punya nilai hilangdf.dropna()
Membuang baris yang tidak punya kolom kuncidf.dropna(subset=["age"])
Mengisi dengan nilai per kolomdf.fillna({"age": df["age"].median()})
Mengisi dari baris sebelumnya atau berikutnyadf["age"].ffill(), df["age"].bfill()
Mengisi celah dengan interpolasidf["age"].interpolate()
Mengubah penanda menjadi nilai hilangdf.replace(["n/a", "-", ""], np.nan)
Membuang baris duplikatdf.drop_duplicates()
Menyimpan baris terakhir per keydf.drop_duplicates(subset=["city"], keep="last")
Merapikan nama kolomdf.columns = df.columns.str.strip().str.lower().str.replace(" ", "_")
Membatasi nilai ekstremdf["salary"].clip(lower=4000, upper=6000)
Tipe category untuk teks yang berulangdf["city"] = df["city"].astype("category")

Kolom teks (.str)

Di pandas 3 kolom teks mendapat dtype str secara default. Method .str bekerja pada seluruh kolom, dan nilai yang hilang tetap hilang.

TugasKode
Huruf besar, kecil, atau kapital di awal katadf["name"].str.upper(), df["name"].str.lower(), df["name"].str.title()
Menghapus spasi di tepidf["name"].str.strip()
Mengganti teksdf["email"].str.replace("mail.com", "example.com")
Mengganti dengan regexdf["email"].str.replace(r"@.*", "", regex=True)
Mengandung, diawali dengandf["name"].str.contains("a"), df["name"].str.startswith("E")
Panjang setiap nilaidf["name"].str.len()
Karakter-karakter pertamadf["name"].str[:2]
Memecah menjadi kolomdf["email"].str.split("@", expand=True)
Mengambil bagian dengan grup regexdf["email"].str.extract(r"@(\w+)")
Menggabungkan kolom teksdf["name"] + " (" + df["city"] + ")"
Menambahkan nol di depan angkadf["salary"].astype("str").str.zfill(6)
Dtype teks yang barudf["name"].dtype # str

Tanggal dan waktu

Accessor .dt bekerja pada kolom datetime. Index tanggal yang terurut (ts di bawah) memungkinkan slicing dengan teks dan resampling.

TugasKode
Mengubah kolom menjadi datetimedf["date"] = pd.to_datetime(df["date"])
Mengubah dengan format yang tepatpd.to_datetime(["03/01/2026", "15/01/2026"], format="%d/%m/%Y")
Tahun, bulan, nama haridf["date"].dt.year, df["date"].dt.month, df["date"].dt.day_name()
Mengelompokkan tanggal per bulandf["date"].dt.to_period("M")
Jumlah hari di antara dua tanggal(pd.Timestamp("2026-12-31") - df["date"]).dt.days
Menambah hari atau bulandf["date"] + pd.Timedelta(days=30), df["date"] + pd.DateOffset(months=1)
Baris dalam rentang tanggaldf[df["date"].between("2021-01-01", "2022-12-31")]
Index tanggal, dipotong dengan teksts = df.set_index("date").sort_index() ts.loc["2021":"2022"]
Total per bulants["salary"].resample("ME").sum()
Rata-rata mingguan; "QE" per kuartal, "YE" per tahunts["salary"].resample("W").mean()
Rata-rata bergulir (rolling)ts["salary"].rolling(3).mean()
Perubahan dari baris sebelumnyats["salary"].diff(), ts["salary"].pct_change()
Menggeser nilai turun satu barists["salary"].shift(1)
Total berjalants["salary"].cumsum()
Mengatur dan mengonversi zona waktuts.index.tz_localize("UTC").tz_convert("Europe/Oslo")

Group dan agregasi

groupby memecah baris berdasarkan key, menerapkan fungsi pada setiap grup, lalu menggabungkan hasilnya.

TugasKode
Rata-rata per grupdf.groupby("city")["salary"].mean()
Beberapa statistik sekaligusdf.groupby("city")["salary"].agg(["mean", "max", "count"])
Kolom hasil bernamadf.groupby("city").agg(avg_pay=("salary", "mean"), people=("name", "count"))
Group berdasarkan dua kolomdf.groupby(["city", "team"])["salary"].sum()
Menjaga key tetap sebagai kolomdf.groupby("city", as_index=False)["salary"].mean()
Jumlah baris per grupdf.groupby("city").size()
Hasil grup di setiap barisdf["city_avg"] = df.groupby("city")["salary"].transform("mean")
Hanya menyimpan grup tertentudf.groupby("city").filter(lambda g: len(g) >= 2)
Baris dengan nilai maksimum per grupdf.loc[df.groupby("city")["salary"].idxmax()]
n baris teratas per grupdf.sort_values("salary", ascending=False).groupby("city").head(2)
Memberi nomor baris di setiap grupdf.groupby("city").cumcount()
Perulangan atas grupfor city, group in df.groupby("city"): print(city, len(group))
Menyaring, group, dan mengurutkan dalam satu rangkaian(df.query("age > 30") .groupby("city", as_index=False) .agg(avg_pay=("salary", "mean")) .sort_values("avg_pay", ascending=False))

Pivot dan reshape

Data panjang (long) punya satu baris per observasi. Data lebar (wide) menyebar satu variabel ke beberapa kolom.

TugasKode
Pivot tabledf.pivot_table(index="city", columns="team", values="salary", aggfunc="mean", fill_value=0)
Pivot table dengan totaldf.pivot_table(index="city", values="salary", aggfunc="sum", margins=True)
Menghitung kombinasipd.crosstab(df["city"], df["team"])
Porsi per barispd.crosstab(df["city"], df["team"], normalize="index")
Lebar ke panjanglong = df.melt(id_vars="name", value_vars=["age", "salary"], var_name="field", value_name="value")
Panjang ke lebarlong.pivot(index="name", columns="field", values="value")
Level index dalam menjadi kolomdf.groupby(["city", "team"])["salary"].sum().unstack(fill_value=0)
Satu baris per item listpd.DataFrame({"id": [1, 2], "tags": [["a", "b"], ["c"]]}).explode("tags")
One-hot encoding sebuah kolompd.get_dummies(df["team"], prefix="team")
Menukar baris dan kolomdf.T

Menggabungkan DataFrame

concat menumpuk frame, merge menggabungkannya berdasarkan kolom kunci seperti SQL.

TugasKode
Menumpuk barispd.concat([df_2025, df_2026], ignore_index=True)
Menaruh berdampinganpd.concat([left, right], axis=1)
Join berdasarkan kolom kunciorders.merge(customers, on="customer_id", how="left")
Jenis joinhow="inner", "left", "right", "outer"
Key dengan nama berbedaorders.merge(users, left_on="customer_id", right_on="id")
Memeriksa join dan menandai sumber setiap barisorders.merge(customers, on="customer_id", how="left", validate="many_to_one", indicator=True)
Join berdasarkan indexleft.join(right, how="inner")
Baris tanpa pasangan di tabel lainorders[~orders["customer_id"].isin(customers["customer_id"])]

Plot dengan pandas

pandas menggambar dengan Matplotlib. Setiap pemanggilan plot mengembalikan ax Matplotlib, jadi kamu bisa terus mengatur tampilannya.

TugasKode
Grafik garis dari sebuah seriests["salary"].plot()
Grafik garis dari dua kolomdf.plot(x="date", y="salary")
Grafik batang dari sebuah ringkasandf.groupby("city")["salary"].mean().plot.bar()
Batang horizontal yang terurutdf["city"].value_counts().sort_values().plot.barh()
Histogramdf["salary"].plot.hist(bins=20)
Scatter plotdf.plot.scatter(x="age", y="salary")
Box plot per grupdf.boxplot(column="salary", by="city")
Judul dan label sumbuax = df.plot(x="date", y="salary", title="Salary") ax.set_ylabel("EUR")
Menampilkan atau menyimpan grafikplt.show(), ax.figure.savefig("salary.png", dpi=150)

pandas 3: bentuk lama dan yang ditulis sekarang

Kode yang disalin dari tutorial lama sering gagal atau memunculkan peringatan di pandas 3. Tulis bentuk di kolom pandas 3 sebagai gantinya.

Tugaspandas 3Bentuk lama
Fungsi pada setiap seldf.map(f)df.applymap(f)
Mengisi dari baris sebelumnyadf.ffill()df.fillna(method="ffill")
Menambah barispd.concat([df, new_rows])df.append(new_rows)
Resampling akhir bulants["salary"].resample("ME").sum()resample("M")
Tanggal per jampd.date_range("2026-01-01", periods=24, freq="h")freq="H"
Mengisi satu nilaidf.loc[0, "age"] = 37df["age"][0] = 37
Mengubah subset hasil saringanhigh = df[df["salary"] > 5000] high["salary"] = 0high = df[df["salary"] > 5000].copy()
Apakah ini kolom teks?df["name"].dtype == "str"df["name"].dtype == object

Kode pandas yang dipakai seorang data analyst setiap hari, dikelompokkan per tugas: membuat dan memuat data, memeriksanya, memilih dan menyaring baris, menambah kolom, membersihkan nilai yang hilang, mengolah teks dan tanggal, group dan agregasi, reshape, merge, dan plot. Setiap baris berisi potongan kode singkat yang bisa kamu tempel, plus satu kalimat tentang kegunaannya.

Semua yang ada di sini ditulis untuk pandas 3, versi yang dijalankan Coddy: kolom teks memakai dtype str yang baru, Copy-on-Write selalu aktif, dan API yang sudah dihapus seperti applymap dan fillna(method=...) hanya muncul di tabel bentuk lama. Contoh-contohnya memakai DataFrame df dengan kolom name, city, team, age, salary, date, dan email. Baru mengenal Python? Mulailah dari cheat sheet Python dan playground Python, dan simpan juga cheat sheet NumPy, Matplotlib, dan scikit-learn di samping halaman ini.

FAQ cheat sheet pandas

Apakah cheat sheet pandas ini gratis?

Ya. Cheat sheet pandas ini sepenuhnya gratis, tanpa perlu daftar. Simpan di bookmark, atau cetak ke PDF dari browsermu, dan kembali kapan pun kamu butuh pemanggilan yang tepat untuk groupby, merge, atau pivot table.

Versi pandas mana yang dibahas cheat sheet ini?
pandas 3. Kolom teks memakai dtype str yang baru, Copy-on-Write selalu aktif, dan pemanggilan yang dihapus di pandas 3 (applymap, fillna(method=...), append, alias frekuensi M dan H) hanya muncul di tabel terakhir, di samping apa yang sebaiknya ditulis sekarang. Hampir semua potongan kode juga berjalan di pandas 2.2, kecuali baris yang mengandalkan dtype str atau Copy-on-Write.
Apa perbedaan loc dan iloc?
loc memilih berdasarkan label, yaitu nilai index dan nama kolom, dan slice seperti df.loc[0:2] menyertakan ujungnya. iloc memilih berdasarkan posisi bilangan bulat, seperti list Python, jadi df.iloc[0:2] mengembalikan dua baris pertama dan tidak menyertakan ujungnya. Pakai loc dengan kondisi untuk menyaring baris sekaligus memilih kolom dalam satu langkah: df.loc[df["age"] > 30, ["name"]].
Bagaimana cara menyaring DataFrame dengan beberapa kondisi?
Taruh setiap kondisi di dalam tanda kurung lalu gabungkan dengan & untuk dan, | untuk atau, dan ~ untuk bukan: df[(df["age"] > 30) & (df["city"] == "Oslo")]. and dan or milik Python tidak bekerja pada seluruh kolom. Untuk saringan yang panjang, df.query("age > 30 and city == 'Oslo'") lebih mudah dibaca.
Apa perbedaan merge, join, dan concat?
merge menggabungkan dua DataFrame berdasarkan kolom kunci, seperti join di SQL, dengan how="inner", "left", "right", atau "outer". join adalah jalan pintas yang melakukan merge berdasarkan index. concat sama sekali tidak mencocokkan key: frame hanya ditumpuk satu di atas yang lain, atau berdampingan dengan axis=1.
Kenapa assignment saya tidak mengubah DataFrame?
Sejak pandas 3, Copy-on-Write membuat setiap seleksi berperilaku seperti salinan. Chained assignment seperti df["age"][0] = 37 mengubah object sementara dan membiarkan df tidak tersentuh. Tulis sebagai satu pemanggilan loc: df.loc[0, "age"] = 37. Method seperti dropna dan fillna juga mengembalikan object baru, jadi simpan hasilnya.
Bisakah saya menjalankan kode pandas secara online?
Bisa. Playground Matplotlib gratis menjalankan Python dengan pandas, NumPy, Matplotlib, dan scikit-learn di browsermu, jadi kamu bisa menempel potongan kode apa pun dari cheat sheet ini dan menjalankannya tanpa menginstal apa pun. Kursus Machine Learning dari Coddy mengajarkan pandas langkah demi langkah, dari DataFrame pertamamu sampai data yang menjadi masukan sebuah model.
Ilustrasi bahasa pemrograman di Coddy

Belajar Pandas bersama Coddy

Mulai