اگر هر هفته چند ساعت صرف کپی‌کردن، فیلترکردن و جمع‌زدن در اکسل می‌کنید، این آموزش برای شماست. من در محیط صنعتی دیده‌ام که همین چند خط پایتون، کار یک روزِ تمام را به چند ثانیه رسانده — نمونه‌اش ابزار قیمت‌گذاری پویا در نمونه‌کارهایم.

نصب pandas

pip install pandas openpyxl

openpyxl موتور خواندن و نوشتن فایل‌های .xlsx است و pandas از آن استفاده می‌کند.

سناریوی واقعی: گزارش فروش

فرض کنید فایل sales.xlsx را دارید با ستون‌های: تاریخ، فروشنده، محصول، تعداد، قیمت واحد. می‌خواهیم گزارش جمع فروش هر فروشنده را بسازیم.

قدم اول: خواندن فایل

import pandas as pd

df = pd.read_excel("sales.xlsx")
print(df.head())        # ۵ ردیف اول
print(len(df), "ردیف")

df (مخفف DataFrame) کل جدول شماست — مثل یک شیت اکسل داخل پایتون.

قدم دوم: ستون محاسباتی

df["مبلغ کل"] = df["تعداد"] * df["قیمت واحد"]

همین یک خط، برای همه ردیف‌ها — چه ۱۰ ردیف چه ۱۰۰ هزار ردیف — ستون جدید می‌سازد.

قدم سوم: فیلتر و جمع‌بندی

# فقط فروش‌های بالای ۵ میلیون
big_sales = df[df["مبلغ کل"] > 5_000_000]

# جمع فروش هر فروشنده (معادل Pivot Table)
report = df.groupby("فروشنده")["مبلغ کل"].sum().sort_values(ascending=False)
print(report)

groupby همان Pivot Table اکسل است، فقط برنامه‌ریزی‌پذیر و تکرارشونده.

قدم چهارم: خروجی گزارش

report.to_excel("report.xlsx", sheet_name="گزارش فروش")
print("گزارش ساخته شد ✅")

جادوی واقعی: چند فایل با هم

قدرت اصلی وقتی معلوم می‌شود که ۳۰ فایل اکسل ماهانه دارید:

from pathlib import Path
import pandas as pd

all_months = []
for file in Path("monthly-reports").glob("*.xlsx"):
    month_df = pd.read_excel(file)
    month_df["فایل"] = file.stem
    all_months.append(month_df)

total = pd.concat(all_months)
total.groupby("فروشنده")["مبلغ کل"].sum().to_excel("yearly-report.xlsx")

سی فایل، یک گزارش سالانه، چند ثانیه.

کی سراغ پایتون بیاییم و کی در اکسل بمانیم؟

  • کار یک‌باره و کوچک؟ خود اکسل سریع‌تر است
  • کار تکراری (هفتگی/ماهانه) یا چندفایلی؟ پایتون بنویسید و هر بار فقط اجرا کنید
  • ورودی از منابع دیگر (وب، دیتابیس، API) می‌آید؟ قطعاً پایتون

تمرین

از فایل فروش خودتان (یا یک فایل ساختگی) گزارشی بسازید که پرفروش‌ترین محصول هر ماه را نشان بدهد. راهنمایی: ستون تاریخ را با pd.to_datetime تبدیل کنید و از df["تاریخ"].dt.month برای گروه‌بندی استفاده کنید.

بازگشت به آموزش‌ها