Table of Contents
شروع کار با pandas
در این بخش با کتابخانهٔ pandas برای کار با دادههای جدولی (مشابه اکسل) آشنا میشوید. هدف این است که بتوانید دادهها را در قالب «جدول» وارد کنید، ببینید، فیلتر کنید و کمی روی آنها تحلیل ساده انجام دهید.
نصب و وارد کردن pandas
اگر pandas را ندارید، با pip نصب میشود:
pip install pandas
در کد پایتون معمولاً pandas را با نام کوتاه pd وارد میکنیم:
import pandas as pdدو ساختار اصلی: Series و DataFrame
pandas دو ساختار دادهای اصلی دارد:
Series(سری): یک ستون تکبعدی (مثل یک ستون در اکسل)DataFrame(دیتافریم): یک جدول دوبعدی شامل سطر و ستون
ساخت یک 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برای انتخاب بر اساس «برچسب» (نام سطر یا ستون)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)توضیح کوتاه:
groupby("city")دادهها را بر اساس شهر گروهبندی میکند.["age"]ستون سن را انتخاب میکند.mean()میانگین سن در هر گروه (هر شهر) را حساب میکند.
چند تابع مفید دیگر:
sum()جمعcount()تعدادmax()بزرگترین مقدارmin()کوچکترین مقدار
مثال: تعداد افراد در هر شهر:
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")با چند خط کد توانستیم داده را بخوانیم، تمیز کنیم، تحلیل کنیم و خروجی را ذخیره کنیم.
جمعبندی
در این بخش یاد گرفتید که:
- pandas را نصب و با نام
pdوارد کنید. - با
SeriesوDataFrameبه عنوان ساختارهای اصلی کار کنید. - فایلهای CSV را با
read_csvبخوانید و باto_csvذخیره کنید. - ستونها و سطرها را انتخاب و فیلتر کنید.
- ستونهای جدید بسازید و مقادیر گمشده را مدیریت کنید.
- با
groupbyتحلیلهای ساده مثل میانگین و جمع انجام دهید.
این مهارتها پایهٔ بسیاری از کارهای عملی علم داده با پایتون هستند و در فصلهای بعدی (مثلاً هنگام استفاده از کتابخانههای دیگر و تحلیلهای پیشرفتهتر) بارها به کارتان میآیند.