Pandas — Beginner ➜ Middle
Bu səhifə Pandas biliklərini praktik nümunələrlə toplayır: oxuma–yazma, seçim–filtrləmə, qruplaşdırma, pivot/crosstab, merge, datetime və s.
df["col"].str.lower().
Qurulum
Layihə üçün virtual mühit yarat və Pandas quraşdır. (Təmiz mühit tövsiyə olunur.)
# venv
python -m venv .venv
.venv\Scripts\activate
pip install --upgrade pip (Optional)
pip install pandas
# conda
# conda create -n pandas101 python=3.11 -y
# conda activate pandas101
# conda install pandas -y
python -c "import pandas as pd; print(pd.__version__)"
Oxuma/Yazma
CSV, Excel, JSON, SQL-dən oxu və fayla yaz.
import pandas as pd
df = pd.read_csv("grocery-data.csv")
print(df.shape) # (rows, cols)
xl = pd.read_excel("report.xlsx", sheet_name="Sales")
j = pd.read_json("data.json")
# import sqlite3
# con = sqlite3.connect("db.sqlite")
# sql_df = pd.read_sql("SELECT * FROM sales", con)
df.to_csv("grocery-data_out.csv", index=False)
İlkin baxış
Cədvələ ümumi baxış, sütunlar, tiplər və statistik xülasə.
print(df.head(5)) # first 5
print(df.columns) # column names
print(df.dtypes) # data types
print(df.info()) # schema + nulls (auto-prints)
print(df.describe()) # numeric stats
Seçim/Filtrləmə
loc/iloc ilə sətir-sütun seç, boolean masklarla filtrlə, sort et.
# columns
price = df["Price"]
sub = df[["Product", "Price"]]
# position vs label
first_row = df.iloc[0]
subset_pos = df.iloc[0:3, 0:2]
row_by_idx = df.loc[5]
subset_lbl = df.loc[0:5, ["Product", "Qty"]]
# boolean filtering
expensive = df[df["Price"] > 5]
mask = (df["Brand"] == "Natura") & (df["Qty"] >= 3)
filtered = df[mask]
some_brands = df[df["Brand"].isin(["Mlek", "Baker"])]
mid_price = df[df["Price"].between(3, 6)]
with_apple = df[df["Product"].str.contains("apple", case=False, na=False)]
# sort
by_price = df.sort_values("Price")
by_price_desc= df.sort_values("Price", ascending=False)
Yeni sütunlar
Hesablanmış sütunlar, şərti sütunlar, string və datetime əməliyyatları.
import numpy as np
df["Total"] = df["Price"] * df["Qty"]
df["IsCheap"] = np.where(df["Price"] < 3, True, False)
# IMPORTANT: method call needs ()
df["Product"] = df["Product"].str.strip().str.lower()
df["Date"] = pd.to_datetime(df["Date"], errors="coerce")
df["Month"] = df["Date"].dt.to_period("M")
Qruplaşdırma
Orta qiymətlər, çoxlu aqreqatlar, crosstab.
# mean price per brand
brand_mean = df.groupby("Brand", as_index=False)["Price"].mean()
# multi aggregations
agg_df = (
df.groupby("Brand")
.agg(avg_price=("Price","mean"),
total_qty=("Qty","sum"),
items=("Product","nunique"))
.reset_index()
)
# crosstab: Product x Brand
xt = pd.crosstab(df["Product"], df["Brand"])
print(xt)
Reshape
Pivot cədvəlləri və uzun/eniş formalar.
pt = pd.pivot_table(
df, index="Month", columns="Brand", values="Qty",
aggfunc="sum", fill_value=0
)
long = pt.reset_index().melt(
id_vars="Month", var_name="Brand", value_name="Qty"
)
NaN və Dublikatlar
Boş dəyərləri say/doldur, dublikatları təmizlə.
na_counts = df.isnull().sum()
df["Price"] = df["Price"].fillna(df["Price"].median())
clean = df.dropna(subset=["Product","Brand","Price"])
dups = df.duplicated()
df_no_dups = df.drop_duplicates(subset=["Product","Brand","Date"])
Birləşdirmə
Digər cədvəllərlə birləşdirərək məlumatı zənginləşdir.
brands = pd.DataFrame({
"Brand": ["Mlek", "Baker", "Natura"],
"Country": ["PL", "AZ", "TR"],
})
merged = df.merge(brands, on="Brand", how="left")
print(merged.columns)
Tarix/Saat
Aylıq toplam satışları çıxarmaq üçün resample istifadə et.
df["Total"] = df["Price"] * df["Qty"]
monthly = (
df.set_index("Date")
.resample("M")["Total"]
.sum()
.to_frame("Total")
.reset_index()
)
print(monthly.tail())
Mini layihə
Brend üzrə toplam gəlir, TOP-3 məhsul və aylıq trend.
sales = df.dropna(subset=["Product","Brand","Price","Qty","Date"]).copy()
sales["Date"] = pd.to_datetime(sales["Date"])
sales["Total"] = sales["Price"] * sales["Qty"]
# 1) Brand totals
brand_totals = (sales.groupby("Brand", as_index=False)["Total"]
.sum()
.sort_values("Total", ascending=False))
print(brand_totals.head())
# 2) Top-3 products
top3_products = (sales.groupby("Product", as_index=False)["Total"]
.sum()
.sort_values("Total", ascending=False)
.take([0,1,2]))
print(top3_products)
# 3) Monthly trend
monthly = (sales.set_index("Date").resample("M")["Total"].sum().reset_index())
print(monthly.tail())
Tapşırıqlar
- Filter: Price 3–6 arası olan sətirlərin Qty ortasını hesabla.
- Pivot: Brand × Product üçün Total dəyərləri ilə pivot cədvəl qur.
- Datetime: Date → datetime çevir, aylıq satışları çıxart və ən çox olan ayı tap.
- Merge: Brand → Country xəritəsi ilə merge edib ölkə üzrə toplam Total tap.
- Missing: Boş Price dəyərlərini median ilə doldur; neçə dəyər dəyişdiyini say.
Səhvlər
.str.lower→ doğrusu:.str.lower()- SettingWithCopyWarning: zəncirli indeksləmə əvəzinə
.locistifadə et. - Dtype-ları düz saxla:
to_datetime,to_numeric. - Vectorization: mümkün olduqda
applyəvəzinə vektor əməliyyatları.
# bad
subset = df[df["Brand"] == "Natura"]
# subset["Price"] = subset["Price"] * 1.1 # may warn
# good
df.loc[df["Brand"] == "Natura", "Price"] *= 1.1
Kiçik CSV
Test üçün minimal CSV:
Product,Brand,Price,Qty,Date
Milk,Mlek,4.5,2,2025-11-01
Bread,Baker,3.2,1,2025-11-02
Apple,Natura,2.0,6,2025-11-03
Apple,Natura,2.5,3,2025-11-04
Milk,Mlek,5.0,2,2025-11-05
Bread,Baker,3.2,4,2025-11-06
Cheat Lines
df = pd.read_csv("grocery-data.csv")
df["Product"] = df["Product"].str.lower().str.strip()
df["Date"] = pd.to_datetime(df["Date"])
df["Total"] = df["Price"] * df["Qty"]
print(pd.crosstab(df["Product"], df["Brand"]))
print(df.groupby("Brand")["Price"].mean())
print(df.sort_values(["Brand","Price"], ascending=[True, False]).head())
# select rows
print(df[(df["Brand"]=="Natura") & (df["Qty"]>=3)][["Product","Qty","Total"]])