pandas

pandas is LINQ + DataTables, rebuilt for the real world. If you know SQL, you already know 70%.

▶ Watch this reel

What you'll learn

  1. DataFrame & Series
  2. Select, filter, sort
  3. groupby & aggregate
  4. merge / join
  5. Missing data & dtypes
  6. Memory & performance

Remember this

DataFrame & Series

Select / filter / sort

SQLpandas
WHEREdf[df["x"] > 1] (boolean mask; & `` need parens)
SELECT colsdf.loc[mask, ["a", "b"]]
ORDER BY … LIMIT.sort_values("x", ascending=False).head(10)

groupby & aggregate

merge / join

Missing data & dtypes

Memory & performance

Code: pandas for the SQL-brained — one realistic pipeline

import pandas as pd

# --- load + orient ------------------------------------------------
df = pd.read_csv("tickets.csv")
print(df.shape, df.dtypes, df.isna().sum(), sep="\n")

# --- clean (documented claims!) ------------------------------------
df["created"] = pd.to_datetime(df["created"], errors="coerce")
df["amount"] = pd.to_numeric(df["amount"], errors="coerce")
df["amount"] = df["amount"].fillna(0)          # claim: missing = free ticket

# --- WHERE + ORDER BY ----------------------------------------------
hot = (df[(df["priority"] == "P1") & (df["status"] == "open")]
         .sort_values("created"))

# --- GROUP BY (named aggs) -----------------------------------------
summary = (df.groupby(["priority", "status"])
             .agg(total=("amount", "sum"),
                  n=("id", "count"),
                  avg=("amount", "mean"))
             .reset_index())

# --- JOIN (explicit everything) ------------------------------------
agents = pd.read_csv("agents.csv")[["agent_id", "team"]]
report = (df.merge(agents, on="agent_id", how="left", validate="m:1")
           .groupby("team")["amount"].sum())

# --- memory trick ----------------------------------------------------
df["status"] = df["status"].astype("category")

report.to_csv("team_report.csv")