Bu modulda Pandas’ning ikki tayanch obyekti — Series va DataFrame, ularga murojaat qilish usullari va yetishmayotgan qiymatlar bilan ishlash o’rganildi.
Pandas nima
Pandas — jadval ko’rinishidagi ma’lumotlar bilan ishlash kutubxonasi: CSV/Excel fayllarni o’qish, tozalash, filtrlash, guruhlash va tahlil qilish. U NumPy ustiga qurilgan — har bir ustun ichida NumPy massivi yotadi, shuning uchun NumPy’dagi vektorlashgan amallar va mask mantiqlari bu yerda ham amal qiladi.
import pandas as pd
Series — indeksli bir o’lchovli ma’lumot
Series listga o’xshaydi, lekin har bir elementning yorlig’i (indeksi) bor:
aholi = pd.Series([2.9, 1.1, 0.6],
index=["Toshkent", "Samarqand", "Buxoro"])
print(aholi["Toshkent"])
print(aholi.mean())
Natija:
2.9
1.5333333333333334
Indeks berilmasa, Pandas 0, 1, 2... raqamlarini o’zi qo’yadi. values — ichidagi NumPy massivi, index — yorliqlar.
DataFrame — jadval
DataFrame — ustunlari nomlangan 2 o’lchovli jadval; har bir ustun o’zi bir Series. Eng ko’p ishlatiladigan yaratish usuli — lug’atdan:
df = pd.DataFrame({
"ism": ["Aziz", "Malika", "Jasur", "Nodira"],
"yosh": [23, 31, 27, 19],
"shahar": ["Toshkent", "Buxoro", "Toshkent", "Samarqand"],
})
print(df.head(2))
Natija:
ism yosh shahar
0 Aziz 23 Toshkent
1 Malika 31 Buxoro
Jadval bilan tanishuvning uch buyrug’i: df.head() — dastlabki qatorlar, df.info() — ustunlar, turlari va bo’sh qiymatlar soni, df.describe() — son ustunlarning statistikasi. Real faylni o’qish: pd.read_csv("fayl.csv").
Bitta ustun — df["yosh"] (Series qaytadi). Ko’p uchraydigan xato: df["yosh", "shahar"] — ikki ustun uchun list ichida list kerak: df[["yosh", "shahar"]].
.loc va .iloc
Ikkalasi ham [qator, ustun] ko’rinishida ishlaydi, farqi — nimani indeks deb tushunishida:
.loc |
.iloc |
|
|---|---|---|
| Qator | indeks yorlig’i bo’yicha | pozitsiya (0, 1, 2...) bo’yicha |
| Ustun | nomi bilan: "yosh" |
tartib raqami bilan: 1 |
Kesim 0:2 |
2 kiradi (yorliq oralig’i) | 2 kirmaydi (Python odati) |
df.loc[1, "ism"] # 'Malika' — yorliq 1, ustun "ism"
df.iloc[1, 0] # 'Malika' — 2-qator, 1-ustun
df.loc[df["yosh"] > 25, ["ism", "yosh"]] # shart + ustunlar
Filtrlash yoki saralashdan keyin qator yorliqlari aralashib ketadi — ana shunda loc[0] "birinchi qator" degani EMASligi ayon bo’ladi: u yorlig’i 0 bo’lgan qatorni izlaydi. Pozitsiya kerak bo’lsa — doim iloc.
NaN: isna, dropna, fillna
Real ma’lumotda kataklar bo’sh qoladi — Pandas ularni NaN deb belgilaydi:
df.isna().sum() # har ustunda nechta bo'sh qiymat
df.dropna() # NaN bor qatorlarni tashlab yuboradi
df["yosh"].fillna(df["yosh"].mean()) # o'rtacha bilan to'ldirish
Ikki muhim odat. Birinchisi: dropna() ham, fillna() ham yangi DataFrame qaytaradi — natijani o’zgaruvchiga yozmasangiz (df = df.dropna()), asl jadval o’zgarmay qolaveradi. Ikkinchisi: NaN’ni == np.nan bilan tekshirib bo’lmaydi (NaN o’ziga ham teng emas!) — faqat isna() ishlatiladi.
Amaliyot
- 5 ta mahsulot nomi va narxidan Series yasang (nomlar — indeks); eng qimmatini
idxmax()bilan toping. - Yuqoridagi
dfjadvalini o’zingiz yozib, ungaballustonini qo’shing vadescribe()natijasini o’qib bering. df.loc[1:2]vadf.iloc[1:2]natijalarini chiqarib, nechta qator qaytganini tushuntiring.- Jadvalning bitta katagiga
Noneyozing (df.loc[2, "yosh"] = None), so’ng bo’sh qiymatni avvalisna()bilan toping, keyin ustun o’rtachasi bilan to’ldiring. df[["ism", "shahar"]]vadf["ism"]qaytargan obyektlarning turinitype()bilan solishtiring.
Modul yakunida test bor — konspektdagi jadval va misollarni qayta ko’rib chiqing.