pandas: DataFrame Pertama
Series, DataFrame, read_csv, head, info, describe. Senjata utama data analyst.
DataFrame: spreadsheet yang bisa diprogram
Analogi paling pas: DataFrame itu seperti spreadsheet Excel, tapi tiap operasinya ditulis sebagai kode sehingga bisa diulang, diaudit, dan dijalankan ke 10 juta baris tanpa ngelag. Series adalah satu kolomnya (array berlabel), DataFrame adalah tabel yang terdiri dari banyak Series.
Kenapa penting buat data analyst? Karena inilah senjata utama sehari-hari. Alur kerja analyst pada umumnya: baca file CSV/Excel, intip isinya, cek kualitas datanya, baru analisis. Tiga langkah pertama itu semuanya terjadi di pandas, dan analyst yang skip langkah "kenali datamu" biasanya menghasilkan insight dari data kotor.
Contoh pertama, bikin DataFrame dari dictionary:
import pandas as pd
df = pd.DataFrame({
"produk": ["Kopi", "Teh", "Susu", "Roti"],
"jumlah": [10, 7, 5, 12],
"harga": [15000, 8000, 12000, 10000],
})
print(df)
print(df.shape) # (4, 3): 4 baris, 3 kolomContoh kedua, alur realistis: baca CSV penjualan, tambah kolom omzet, lalu kenali datanya.
df = pd.read_csv("penjualan.csv")
print(df.head()) # intip 5 baris pertama
print(df.info()) # tipe tiap kolom + data yang tidak kosong
print(df.describe()) # mean, min, max khusus kolom angka
df["omzet"] = df["jumlah"] * df["harga"] # kolom baru, tanpa loop
print(df[["produk", "omzet"]].head())Perhatikan df["omzet"] = df["jumlah"] * df["harga"]: perkalian antar kolom terjadi per baris secara otomatis (vectorization warisan NumPy). Tidak perlu loop, tidak perlu apply.
Tiga jurus eksplorasi (head, info, describe) wajib jadi refleks. Khususnya info(): kalau kolom harga terbaca sebagai object (teks) padahal isinya angka, berarti ada data kotor seperti "Rp15.000" atau sel kosong aneh. Perbaiki dulu, baru hitung. Analyst senior bisa menebak kualitas dataset hanya dari output info().
Jebakan umum
SALAH: ambil banyak kolom pakai satu kurung siku.
df["produk", "harga"] # KeyError! Python mengira ini satu key tupleBENAR: dua kurung siku untuk banyak kolom.
df[["produk", "harga"]] # DataFrame rapi dua kolomAturannya: satu kurung = satu kolom = Series, dua kurung = beberapa kolom = DataFrame. Jebakan ini memakan korban tiap minggu di forum-forum pandas.
SALAH: langsung percaya isi CSV tanpa cek, lalu heran kenapa hasil hitungannya aneh.
df = pd.read_csv("penjualan.csv")
print(df["harga"].mean()) # error atau hasil ngaco kalau kolomnya objectBENAR: cek info() dulu, tangani data kotor saat baca.
df = pd.read_csv("penjualan.csv", na_values=["-", "kosong", ""])
print(df.info()) # pastikan harga = int64/float64 sebelum dihitungCatatan teknis:
ilocmemilih by posisi (df.iloc[0]= baris pertama),locmemilih by label (df.loc[0, "produk"]). Kalau indeksmu masih default 0,1,2 keduanya terlihat sama, tapi setelah filter atau sort indeks bisa acak dan bedanya jadi penting.
Tantangan
Eksplorasi dataset kecil
Buat DataFrame dari dictionary dengan kolom nama, kota, transaksi (isi 5 baris bebas). Tampilkan head(), info(), describe(), dan shape. Tulis satu kalimat kesimpulan tentang datanya.