Kahibaro
Discord Login Register

آشنایی با pandas

شروع کار با pandas

در این بخش با کتابخانهٔ pandas برای کار با داده‌های جدولی (مشابه اکسل) آشنا می‌شوید. هدف این است که بتوانید داده‌ها را در قالب «جدول» وارد کنید، ببینید، فیلتر کنید و کمی روی آن‌ها تحلیل ساده انجام دهید.

نصب و وارد کردن pandas

اگر pandas را ندارید، با pip نصب می‌شود:

pip install pandas

در کد پایتون معمولاً pandas را با نام کوتاه pd وارد می‌کنیم:

import pandas as pd

دو ساختار اصلی: Series و DataFrame

pandas دو ساختار داده‌ای اصلی دارد:

ساخت یک Series ساده

import pandas as pd
ages = pd.Series([20, 25, 30])
print(ages)

خروجی شبیه این است:

0    20
1    25
2    30
dtype: int64

سمت چپ (0, 1, 2) «اندیس» (index) است و سمت راست مقدارها.

می‌توانید اندیس دلخواه تعریف کنید:

ages = pd.Series([20, 25, 30], index=["Ali", "Sara", "Reza"])
print(ages)

ساخت یک DataFrame ساده

یک DataFrame شبیه یک جدول با چند ستون است:

import pandas as pd
data = {
    "name": ["Ali", "Sara", "Reza"],
    "age": [20, 25, 30],
    "city": ["Tehran", "Shiraz", "Tabriz"],
}
df = pd.DataFrame(data)
print(df)

خروجی:

   name  age    city
0   Ali   20  Tehran
1  Sara   25  Shiraz
2  Reza   30  Tabriz

خواندن و نوشتن فایل‌های CSV با pandas

یکی از اصلی‌ترین کاربردهای pandas، کار با فایل‌های CSV است (فایل‌های جدولی با جداکنندهٔ کاما یا جداکننده‌های دیگر).

خواندن فایل CSV

اگر یک فایل به نام students.csv داشته باشید، مثلاً:

name,age,city
Ali,20,Tehran
Sara,25,Shiraz
Reza,30,Tabriz

می‌توانید آن را این طور بخوانید:

import pandas as pd
df = pd.read_csv("students.csv")
print(df)

اگر جداکنندهٔ فایل چیز دیگری مثل ; باشد، باید به pandas بگویید:

df = pd.read_csv("students.csv", sep=";")

ذخیره کردن DataFrame در فایل CSV

بعد از پردازش داده‌ها می‌توانید آن‌ها را در یک فایل جدید ذخیره کنید:

df.to_csv("students_clean.csv", index=False)

آرگومان index=False باعث می‌شود ستون اندیس در فایل ذخیره نشود.

بررسی سریع داده‌ها

pandas چند متد خیلی مفید برای نگاه سریع به داده‌ها دارد.

نمایش چند سطر اول و آخر

print(df.head())      # پیش‌فرض 5 سطر اول
print(df.head(3))     # 3 سطر اول
print(df.tail())      # 5 سطر آخر
print(df.tail(2))     # 2 سطر آخر

اطلاعات کلی دربارهٔ DataFrame

print(df.info())

این دستور نوع دادهٔ هر ستون، تعداد سطرها و این که آیا مقدار گمشده (NaN) وجود دارد را نشان می‌دهد.

آمار توصیفی سریع

برای ستون‌های عددی:

print(df.describe())

خروجی شامل count, mean, min, max و چند مقدار آماری دیگر است.

انتخاب ستون‌ها و سطرها

انتخاب یک ستون

ستون‌ها شبیه دیکشنری یا ویژگی شیء قابل دسترسی‌اند:

# به صورت دیکشنری
ages = df["age"]
# به صورت ویژگی (اگر نام ستون مناسب باشد)
names = df.name

نتیجه یک Series است.

انتخاب چند ستون

subset = df[["name", "city"]]
print(subset)

انتخاب بر اساس اندیس (loc و iloc)

`loc`: بر اساس نام‌ها
# سطر با برچسب 0 و ستون "name"
print(df.loc[0, "name"])
# همهٔ سطرها و فقط ستون‌های age و city
print(df.loc[:, ["age", "city"]])

اگر اندیس سطرها نام‌گذاری شده باشد (مثلاً اسم دانشجو)، می‌توانید با آن کار کنید.

`iloc`: بر اساس شماره
# سطر اول و ستون دوم (شماره‌گذاری از 0)
print(df.iloc[0, 1])
# سه سطر اول و دو ستون اول
print(df.iloc[0:3, 0:2])

فیلتر کردن سطرها (شرط روی داده‌ها)

می‌توانید روی ستون‌ها شرط بگذارید و فقط سطرهای خاص را نگه دارید.

فیلتر ساده

دانشجویانی که سن‌شان بالاتر از ۲۰ است:

older = df[df["age"] > 20]
print(older)

ترکیب چند شرط

شرط‌ها با & (و) و | (یا) ترکیب می‌شوند. باید هر شرط را در پرانتز بگذارید:

# سن > 20 و شهر = Tehran
cond = (df["age"] > 20) & (df["city"] == "Tehran")
result = df[cond]

اضافه کردن و تغییر ستون‌ها

ساختن یک ستون جدید بر اساس ستون‌های دیگر

فرض کنید می‌خواهیم ستونی به نام age_in_5_years بسازیم:

df["age_in_5_years"] = df["age"] + 5
print(df)

تغییر مقدار یک ستون موجود

تمام شهرها را به حروف بزرگ تبدیل کنیم:

df["city"] = df["city"].str.upper()

کار با مقادیر گمشده (NaN)

وقتی داده‌ای در یک سلول وجود نداشته باشد، pandas معمولاً آن را NaN ذخیره می‌کند.

پیدا کردن مقدارهای گمشده

print(df.isna())         # True/False برای هر سلول
print(df.isna().sum())   # تعداد NaN در هر ستون

حذف سطرهای دارای مقدار گمشده

df_clean = df.dropna()

جایگزین کردن مقدارهای گمشده

مثلاً جایگزین کردن سن خالی با ۰:

df["age"] = df["age"].fillna(0)

یا مقدار «نامشخص» برای شهر:

df["city"] = df["city"].fillna("unknown")

گروه‌بندی و محاسبات ساده (groupby)

یکی از ویژگی‌های بسیار مهم pandas، گروه‌بندی داده‌ها است. مثلاً می‌خواهیم میانگین سن را برای هر شهر حساب کنیم.

grouped = df.groupby("city")["age"].mean()
print(grouped)

توضیح کوتاه:

چند تابع مفید دیگر:

مثال: تعداد افراد در هر شهر:

count_by_city = df.groupby("city")["name"].count()
print(count_by_city)

مرتب‌سازی داده‌ها

برای مرتب‌سازی بر اساس یک ستون:

# مرتب‌سازی بر اساس age به صورت صعودی
sorted_df = df.sort_values("age")
# مرتب‌سازی به صورت نزولی
sorted_df_desc = df.sort_values("age", ascending=False)

می‌توانید بر اساس چند ستون هم مرتب کنید:

sorted_multi = df.sort_values(by=["city", "age"])

مثالی از یک جریان کاری ساده با pandas

در این مثال یک فایل فروش را می‌خوانیم، تمیز می‌کنیم، بعد کمی تحلیل ساده انجام می‌دهیم.

فرض کنید فایل sales.csv شبیه این است:

date,product,price,city
2024-01-01,Book,100,Tehran
2024-01-02,Pen,20,Tehran
2024-01-02,Book,100,Shiraz
2024-01-03,Notebook,,Tehran

حالا:

import pandas as pd
# 1) خواندن فایل
df = pd.read_csv("sales.csv")
# 2) بررسی سریع
print(df.head())
print(df.info())
# 3) جایگزینی قیمت‌های خالی با 0
df["price"] = df["price"].fillna(0)
# 4) محاسبهٔ فروش کل (جمع قیمت‌ها)
total_sales = df["price"].sum()
print("Total sales:", total_sales)
# 5) فروش کل به ازای هر شهر
sales_by_city = df.groupby("city")["price"].sum()
print(sales_by_city)
# 6) ذخیرهٔ نتایج گروه‌بندی در فایل جدید
sales_by_city.to_csv("sales_by_city.csv")

با چند خط کد توانستیم داده را بخوانیم، تمیز کنیم، تحلیل کنیم و خروجی را ذخیره کنیم.

جمع‌بندی

در این بخش یاد گرفتید که:

این مهارت‌ها پایهٔ بسیاری از کارهای عملی علم داده با پایتون هستند و در فصل‌های بعدی (مثلاً هنگام استفاده از کتابخانه‌های دیگر و تحلیل‌های پیشرفته‌تر) بارها به کارتان می‌آیند.

Views: 6

Comments

Please login to add a comment.

Don't have an account? Register now!