NumPy: Create
import numpy as np
np.array([1, 2, 3])
np.zeros((2, 3)); np.ones((2, 3))
np.full((2, 2), 7); np.eye(3)
np.arange(0, 10, 2)
np.linspace(0, 1, 5)
np.random.default_rng(0).random(3)
a.reshape(3, 4); a.flatten(); a.T
a.astype(np.float32)
Inspect
a.shape; a.ndim; a.size; a.dtype
NumPy: Math & Broadcast
a + b; a * 2; a ** 2 # elementwise
np.sqrt(a); np.exp(a); np.log(a)
a @ b # matrix multiply
a + np.array([1, 2, 3]) # broadcast row
a + np.array([[1], [2]]) # broadcast col
np.where(a > 0, a, 0) # vectorized if
Aggregate
a.sum(); a.mean(); a.std()
a.min(); a.max(); a.argmax()
a.sum(axis=0) # per column
a.sum(axis=1) # per row
a.cumsum(); np.unique(a)
NumPy: Index & Slice
a[2:5]; a[::-1]; a[::2]
a[a > 5] # boolean mask
a[[0, 2, 4]] # fancy index
m[1, 2]; m[:, 0]; m[0:2, 1:3]
m[m % 2 == 0]
pandas: I/O & Inspect
import pandas as pd
df = pd.read_csv("f.csv")
pd.read_json("f.json"); pd.read_parquet("f.pq")
df.to_csv("out.csv", index=False)
df.head(); df.tail(); df.sample(5)
df.info(); df.describe()
df.shape; df.columns; df.dtypes
df.nunique(); df["c"].value_counts()
pandas: Select
df["col"]; df[["a", "b"]]
df.loc[0, "col"] # by label
df.loc[df["x"] > 5] # boolean filter
df.loc[0:2, ["a", "b"]] # label slice (inclusive)
df.iloc[0]; df.iloc[0:2, 0:2] # position (exclusive)
df.query("x > 5 and y == 'A'")
df[df["c"].isin(["A", "B"])]
loc vs iloc
|
.loc |
.iloc |
| By | label | position |
| Slice end | inclusive | exclusive |
| Mask | yes | no |
pandas: Transform
df["new"] = df["a"] + df["b"]
df.assign(z=lambda d: d["a"] * 2)
df["c"].map({"A": 1, "B": 2})
df["c"].apply(lambda x: x.upper())
df.rename(columns={"a": "alpha"})
df.sort_values("score", ascending=False)
df.drop(columns=["tmp"])
df.astype({"score": "int32"})
pandas: GroupBy & Agg
df.groupby("team")["score"].mean()
df.groupby("team").agg(
avg=("score", "mean"),
n=("score", "size"),
)
df.groupby(["a", "b"]).sum()
df.groupby("team").transform("mean") # broadcast back
pandas: Merge & Reshape
pd.merge(a, b, on="id", how="left")
pd.merge(a, b, left_on="x", right_on="y")
pd.concat([a, b], ignore_index=True) # rows
pd.concat([a, b], axis=1) # cols
df.pivot_table(index="i", columns="c",
values="v", aggfunc="mean")
df.melt(id_vars="id", var_name="k", value_name="v")
df.set_index("id"); df.reset_index()
pandas: Missing Data
df.isna().sum()
df.dropna(); df.dropna(subset=["c"])
df.fillna(0); df["c"].fillna(df["c"].mean())
df.ffill(); df.bfill()
df.drop_duplicates()
List vs Array
| Task |
list |
ndarray |
| Double all | [x*2 for x in l] | a * 2 |
| Speed | slow | fast |
| 2D | nested | native |