Pandas untuk Web Developer
Pandas adalah library Python yang menjadi standar untuk manipulasi data tabular. Sebagai web developer yang terbiasa dengan array/object di JavaScript, Pandas akan terasa familiar.
DataFrame Basics
import pandas as pd
# Buat DataFrame dari dictionary (mirip array of objects di JS)
df = pd.DataFrame({
"user_id": [1, 2, 3, 4, 5],
"name": ["Budi", "Siti", "Ahmad", "Dewi", "Eko"],
"plan": ["pro", "free", "pro", "enterprise", "free"],
"monthly_spend": [99000, 0, 99000, 499000, 0]
})
print(df.head()) # 5 baris pertama
print(df.shape) # (5, 4) — 5 rows, 4 columns
print(df.dtypes) # tipe data per kolom
print(df.describe()) # statistik numerik
Filtering & Selection
# Select kolom (seperti SELECT di SQL)
names = df["name"]
subset = df[["name", "plan"]]
# Filter rows (seperti WHERE di SQL)
pro_users = df[df["plan"] == "pro"]
big_spenders = df[df["monthly_spend"] > 50000]
# Multiple conditions
active_pro = df[(df["plan"] == "pro") & (df["monthly_spend"] > 0)]
Transformasi
# Tambah kolom baru
df["annual_spend"] = df["monthly_spend"] * 12
# Apply function ke kolom
df["name_lower"] = df["name"].str.lower()
# Map values (seperti object lookup di JS)
plan_price = {"free": 0, "pro": 99000, "enterprise": 499000}
df["plan_price"] = df["plan"].map(plan_price)
# Handling missing values
df["email"] = df["email"].fillna("[email protected]")
df = df.dropna(subset=["user_id"]) # drop rows tanpa user_id
Grouping & Aggregation
# GROUP BY (seperti SQL)
revenue_by_plan = df.groupby("plan")["monthly_spend"].agg(["sum", "mean", "count"])
print(revenue_by_plan)
# Output:
# sum mean count
# enterprise 499000 499000 1
# free 0 0 2
# pro 198000 99000 2
# Multiple aggregations
summary = df.groupby("plan").agg(
total_revenue=("monthly_spend", "sum"),
user_count=("user_id", "count"),
avg_spend=("monthly_spend", "mean")
).reset_index()
Merge / Join
# Mirip SQL JOIN
orders = pd.DataFrame({"user_id": [1, 2, 1, 3], "amount": [50000, 30000, 75000, 60000]})
users = pd.DataFrame({"user_id": [1, 2, 3], "name": ["Budi", "Siti", "Ahmad"]})
# INNER JOIN
merged = orders.merge(users, on="user_id", how="inner")
# LEFT JOIN
merged = orders.merge(users, on="user_id", how="left")