فیلتر و مرتبسازی داده
انتخاب داده با شرطها در pandas، استفاده از loc و iloc، ترکیب شرطها و مرتبسازی با sort_values
چرا فیلتر و مرتبسازی؟
همیشه با کل داده کار نمیکنیم؛ گاهی فقط مشتریان تهران را میخواهیم، یا ۱۰ محصول پرفروش را. فیلتر یعنی انتخاب سطرهایی که شرطی دارند و مرتبسازی یعنی چیدن سطرها بر اساس یک ستون.
فیلتر با شرط ساده
در pandas، شرط روی ستون، یک Series از True/False میسازد و با آن سطرها را انتخاب میکنیم:
# مشتریان بالای ۳۰ سال
mask = df["age"] > 30
adults = df[mask]
# خلاصه در یک خط:
adults = df[df["age"] > 30]
عملگرهای شرطی
| عملگر | معنا | مثال |
|---|---|---|
| > و >= | بزرگتر / بزرگتر مساوی | df["age"] >= 18 |
| < و <= | کوچکتر / کوچکتر مساوی | df["price"] < 1000 |
| == | مساوی | df["city"] == "تهران" |
| != | نامساوی | df["status"] != "لغو" |
| isin | عضو لیست | df["city"].isin(["تهران", "شیراز"]) |
| between | در بازه | df["age"].between(20, 40) |
| str.contains | شامل متن | df["name"].str.contains("علی") |
ترکیب شرطها
در پایتون معمولی از and/or استفاده میکنیم، اما در pandas (بهخاطر عملکرد برداری) از عملگرهای بیتی استفاده میشود:
# مشتریان تهران که بالای ۳۰ سال دارند
df[(df["city"] == "تهران") & (df["age"] > 30)]
# مشتریان تهران یا شیراز
df[df["city"].isin(["تهران", "شیراز"])]
هشدار: در pandas حتماً هر شرط را داخل پرانتز بگذارید و از & و | استفاده کنید؛ and و or روی Series خطا میدهند!
انتخاب سطر و ستون همزمان: loc و iloc
df.loc[df["age"] > 30, "name"] # سطرهای شرط + فقط ستون name
df.loc[0:2, ["name", "age"]] # برچسبمحور
df.iloc[0:3, 0:2] # موقعیتمحور (مثل برش لیست)
مرتبسازی با sort_values
# بر اساس یک ستون (نزولی)
df.sort_values("sales", ascending=False)
# بر اساس چند ستون
df.sort_values(["city", "sales"], ascending=[True, False])
# سه سطر برتر پس از مرتبسازی
df.nlargest(3, "sales")
بهترین شیوهها
- شرطهای پیچیده را در متغیر جدا تعریف کنید تا خوانا بماند
- بعد از فیلتر،
len(df)را چک کنید تا ببینید چند سطر باقی مانده - برای مقادیر گمشده در فیلترها حواستان به NaN باشد؛ مقایسه با NaN همیشه False است
جمعبندی
- فیلتر = انتخاب سطر با ماسک True/False
- ترکیب شرطها با & و | و حتماً داخل پرانتز
- loc برچسبمحور و iloc موقعیتمحور
- sort_values برای مرتبسازی و nlargest برای برترینها
این مبحث بخشی از دوره آموزش کامل علم داده است.