مقدمه‌ای بر Pandas: تحلیل و پاکسازی داده‌ها در پایتون
ﺯﻣﺎﻥ ﻣﻄﺎﻟﻌﻪ: 11 دقیقه

مقدمه‌ای بر Pandas: تحلیل و پاکسازی داده‌ها در پایتون

تحلیل داده در پایتون بدون Pandas عملاً ممکن نیست. این کتابخانه به‌عنوان هسته اصلی جریان کاری داده، ابزارهایی فراهم می‌کند که استخراج، پاکسازی، تبدیل و تحلیل داده را از یک فرآیند پراکنده و زمان‌بر به مجموعه‌ای منسجم و قابل اتکا تبدیل می‌کند. چالش اصلی در هر پروژهٔ تحلیلی، نه اجرای الگوریتم‌ها بلکه مواجهه با داده‌های ناپایدار، ناقص و آلوده است؛ جایی که Pandas به‌خوبی نقش خود را نشان می‌دهد.

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

این مطلب با هدف ارائه یک مسیر روشن برای آشنایی اولیه با Pandas تدوین شده است: از مفاهیم بنیادین DataFrame و Series تا تکنیک‌های عملی پاکسازی و تحلیل داده در پروژه‌های واقعی. تمرکز بر آن است که خواننده به‌جای یادگیری مجموعه‌ای از توابع پراکنده، منطق کار با داده را درک کند؛ منطقی که در قلب هر پروژهٔ تحلیلی موفق قرار دارد.

نصب، محیط اجرا و بارگذاری اولین دیتاست

کار با Pandas زمانی معنا پیدا می‌کند که یک محیط پایدار و قابل تکرار برای اجرای کد فراهم باشد. مناسب‌ترین گزینه برای شروع، Jupyter Notebook یا محیطی معادل در VS Code است؛ فضایی که امکان اجرای مرحله‌به‌مرحله کد، مشاهده خروجی‌ها و مستندسازی هم‌زمان را فراهم می‌کند. نصب Pandas نیز ساده است و با استفاده از pip یا محیط‌های مبتنی بر Anaconda در چند ثانیه انجام می‌شود، اما نکته مهم‌تر، ایجاد یک محیط ایزوله است تا نسخه‌های کتابخانه‌ها و وابستگی‌ها در طول پروژه تغییر نکنند.

پس از فراهم‌سازی محیط، نخستین گام تعریف یک مسئله و انتخاب یک دیتاست مشخص است. بسیاری از پروژه‌ها از همین نقطه دچار اختلال می‌شوند، زیرا داده‌ها از منابع نامطمئن، بدون ساختار یا بدون توصیف کافی انتخاب می‌شوند. بارگذاری داده در Pandas صرفاً یک دستور read_csv نیست؛ بلکه اولین نقطه تماس با کیفیت داده است. نوع ستون‌ها، وجود یا نبود هدر، کدگذاری کاراکترها و نحوه جداسازی مقادیر همان‌جا تعیین می‌شود و هر اشتباه در این مرحله هزینه‌ای مضاعف در مراحل پاکسازی ایجاد خواهد کرد.

عملیات ابتدایی پس از بارگذاری نیز ارزش تشخیصی دارند: مشاهده چند ردیف نخست، بررسی شکل کلی داده (shape)، شناسایی ستون‌های مشکوک و ارزیابی اولیه انواع داده. این مرحله باید با هدف شناخت ساختار داده انجام شود، نه صرفاً برای آشنایی ظاهری با DataFrame. از همین نقطه مشخص می‌شود که چه بخش‌هایی از داده قابل استفاده‌اند، کدام ستون‌ها نیازمند تبدیل‌اند و چه نوع پاکسازی‌هایی در ادامه ضروری خواهد بود.

اصول بنیادی DataFrame

DataFrame شکلی استاندارد از نمایش داده‌های جدولی است که امکان پردازش، فیلتر، تجمیع و تبدیل را در مقیاس قابل قبول فراهم می‌کند. در قلب این ساختار دو مفهوم کلیدی قرار دارد: محورها (axis) و شاخص‌ها (index). هر عملیات در Pandas بر پایه همین دو مفهوم عمل می‌کند و نادیده‌گرفتن آن‌ها منشأ بخش عمده‌ای از خطاها و سوءبرداشت‌ها در تحلیل داده است. محور صفر به ردیف‌ها و محور یک به ستون‌ها اشاره دارد؛ بسیاری از عملیات تغییرپذیرند و تنها با تعیین صحیح محور، نتیجه درست حاصل خواهد شد.

Series واحد بنیادی ساخت DataFrame است و هر ستون را می‌توان یک Series مستقل دانست. این استقلال دو پیامد مهم دارد: نخست اینکه هر ستون نوع داده (dtype) مشخص و مجزا دارد و دوم اینکه عملیات برداری روی یک ستون با تکیه بر مدل هم‌ترازی خودکار (alignment) انجام می‌شود. این هم‌ترازی به‌ظاهر سودمند است، اما اگر شاخص‌ها ناخواسته تغییر کنند، عملیات روی ستون‌های نامرتبط یا با طول متفاوت به خطا یا خروجی غلط منجر خواهد شد. بنابراین، کنترل و درک نحوه شکل‌گیری index پیش‌نیاز هر اقدام بعدی است.

شناخت انواع داده نیز نقش تعیین‌کننده‌ای در کارایی تحلیل دارد. ستون‌هایی که به‌ظاهر عددی هستند ولی در قالب رشته ذخیره شده‌اند، تاریخ‌هایی که با فرمت‌های ناسازگار وارد شده‌اند یا مقادیری که به‌صورت دسته‌بندی‌شده (categorical) تعریف نشده‌اند، همگی باعث افزایش هزینه پردازش و کاهش دقت تحلیل می‌شوند. DataFrame ابزاری برای مشاهده و اصلاح این ساختارها فراهم می‌کند، اما تحلیلگر باید بداند که هر تغییر نوع داده یک تصمیم تحلیلی است، نه صرفاً یک اقدام فنی.

انتخاب، فیلتر و دسترسی به داده

انتخاب و فیلتر داده در Pandas زمانی قابل اعتماد است که تفاوت میان روش‌های مختلف دسترسی و پیامدهای هرکدام درک شود. دو ابزار اصلی برای این کار loc و iloc هستند. loc بر پایه برچسب‌ها (labels) کار می‌کند و iloc بر پایه موقعیت‌ها (integer positions). اشتباه در انتخاب این دو، یکی از رایج‌ترین منابع خطا در پردازش داده است.

نمونه‌ای ساده از بارگذاری داده و مشاهده اولیه:

import pandas as pd

df = pd.read_csv("data.csv")
df.head()

دسترسی بر اساس برچسب با loc:

# انتخاب ردیف با index برابر 10 و ستون 'price'
df.loc[10, 'price']

# انتخاب چند ستون
df.loc[:, ['name', 'category', 'price']]

دسترسی بر اساس موقعیت با iloc:

# انتخاب ردیف پنجم و ستون دوم
df.iloc[4, 1]

# انتخاب ستون‌های 0 تا 2 برای ردیف‌های 0 تا 4
df.iloc[0:5, 0:3]

فیلتر کردن داده بر اساس شرط، یکی از مهم‌ترین ابزارهای تحلیل است. Pandas این کار را از طریق boolean indexing انجام می‌دهد:

# انتخاب محصولاتی با قیمت بالاتر از 100
filtered = df[df['price'] > 100]

# انتخاب ردیف‌هایی با چند شرط ترکیبی
filtered = df[(df['price'] > 100) & (df['category'] == 'food')]

خطری جدی در این بخش، پدیده‌ای به نام chain indexing است؛ حالتی که کاربر به‌صورت ناخواسته دو انتخاب پشت‌سرهم انجام می‌دهد و به‌جای تغییر روی داده اصلی، یک کپی موقتی را تغییر می‌دهد:

# اشتباه
df[df['price'] > 100]['discount'] = 0.1

این دستور نه‌تنها پایدار نیست بلکه ممکن است در سکوت اجرا شود و انتظار تحلیلگر را برآورده نکند. شکل صحیح:

df.loc[df['price'] > 100, 'discount'] = 0.1

تمام عملیات انتخاب و فیلتر باید به‌نحوی نوشته شوند که مشخص کند کدام بخش از داده و با چه منطق انتخاب شده است. 

پاکسازی داده: تشخیص، تصمیم‌گیری و اجرای دقیق

پاکسازی داده مرحله‌ای صرفاً عملیاتی نیست؛ بخش عمده‌ای از آن به تشخیص مسئله و انتخاب راهکار مناسب مربوط می‌شود. داده‌های ناقص، انواع ناسازگار، مقادیر پرت و ردیف‌های تکراری بخشی طبیعی از هر دیتاست واقعی هستند و Pandas ابزارهای لازم برای شناسایی و اصلاح آن‌ها را فراهم می‌کند. نکته کلیدی این است که هر عملیات پاکسازی باید مبنای تحلیلی داشته باشد؛ حذف یا تغییر مقادیر بدون منطق مشخص، اعتبار خروجی را مخدوش می‌کند.

بررسی مقدارهای گمشده نقطه شروع است:

# شمارش مقدارهای گمشده در هر ستون
df.isna().sum()

# درصد مقدارهای گمشده
df.isna().mean() * 100

پس از تشخیص، باید تصمیم گرفت: حذف یا جایگزینی؟

# حذف ردیف‌هایی با حداقل یک مقدار گمشده
df_clean = df.dropna()

# پر کردن مقدارهای گمشده با مقدار ثابت
df['price'] = df['price'].fillna(0)

# پر کردن مقدارهای گمشده با میانگین ستون
df['age'] = df['age'].fillna(df['age'].mean())

عدم سازگاری انواع داده از مسائل رایج است؛ تاریخ‌ها معمولاً به‌صورت رشته وارد می‌شوند و ستون‌های عددی به دلیل نویز داده به فرمت object تبدیل می‌شوند:

# تبدیل ستون تاریخ
df['date'] = pd.to_datetime(df['date'], errors='coerce')

# تبدیل ستون عددی
df['quantity'] = pd.to_numeric(df['quantity'], errors='coerce')

شناسایی و حذف داده‌های تکراری نیز بخشی مهم از پاکسازی است:

# یافتن ردیف‌های تکراری
df.duplicated().sum()

# حذف ردیف‌های تکراری
df = df.drop_duplicates()

مقادیر پرت (outliers) بدون تحلیل شناسایی نمی‌شوند و Pandas به‌صورت پیش‌فرض ابزاری برای تصمیم‌گیری در این مورد ارائه نمی‌کند؛ بنابراین تحلیلگر باید ابتدا شاخص‌هایی مثل توزیع داده و فاصله از چارک‌ها را بررسی کند:

# تشخیص ساده پرت‌ها با IQR
Q1 = df['price'].quantile(0.25)
Q3 = df['price'].quantile(0.75)
IQR = Q3 - Q1
outliers = df[(df['price'] < Q1 - 1.5 * IQR) | (df['price'] > Q3 + 1.5 * IQR)]

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

پاکسازی داده‌ها با Pandas

یکی از مهم‌ترین وظایف تحلیل‌گر داده، آماده‌سازی داده‌ها برای تحلیل است. داده‌های واقعی معمولاً دارای مقادیر گمشده، داده‌های تکراری یا فرمت‌های نادرست هستند. کتابخانه‌ی Pandas ابزارهای قدرتمندی برای شناسایی و اصلاح این مشکلات ارائه می‌دهد.

شناسایی مقادیر گمشده

برای پیدا کردن مقادیر گمشده در یک DataFrame می‌توان از متد isnull() استفاده کرد:

import pandas as pd

# نمونه داده‌ها
data = {'نام': ['علی', 'سارا', None, 'مهدی'],
        'سن': [25, None, 30, 22]}
df = pd.DataFrame(data)

# نمایش مقادیر گمشده
print(df.isnull())

خروجی نشان می‌دهد که کدام سلول‌ها دارای مقادیر گمشده هستند.

حذف یا جایگزینی مقادیر گمشده

برای پاکسازی داده‌ها، می‌توان مقادیر گمشده را حذف یا با مقادیر جایگزین پر کرد:

# حذف ردیف‌هایی که حداقل یک مقدار گمشده دارند
df_cleaned = df.dropna()
print(df_cleaned)

# جایگزینی مقادیر گمشده با مقدار پیش‌فرض
df_filled = df.fillna({'نام': 'ناشناخته', 'سن': 0})
print(df_filled)

حذف داده‌های تکراری

داده‌های تکراری می‌توانند نتایج تحلیل را تحریف کنند. Pandas امکان حذف آن‌ها را با drop_duplicates() فراهم می‌کند:

df_duplicates = pd.DataFrame({'نام': ['علی', 'سارا', 'علی'], 'سن': [25, 28, 25]})
df_no_duplicates = df_duplicates.drop_duplicates()
print(df_no_duplicates)

اصلاح فرمت داده‌ها

گاهی لازم است نوع داده‌ی ستون‌ها تغییر کند، مثلاً تبدیل رشته به عدد:

df_filled['سن'] = df_filled['سن'].astype(int)
print(df_filled.dtypes)

این اقدامات پایه‌ای در پاکسازی داده‌ها، به شما امکان می‌دهد داده‌های منظم و آماده تحلیل داشته باشید و ریسک خطا در مراحل بعدی را کاهش دهید.

تحلیل داده‌ها با Pandas

پس از پاکسازی داده‌ها، مرحله بعدی تحلیل آن‌هاست. Pandas ابزارهای متنوعی برای بررسی سریع داده‌ها، انجام محاسبات آماری و استخراج الگوها ارائه می‌دهد.

مشاهده خلاصه‌ای از داده‌ها

برای درک سریع از داده‌ها می‌توان از متدهای head() ،info() و describe() استفاده کرد:

# نمایش پنج ردیف اول
print(df.head())

# اطلاعات کلی درباره ستون‌ها و نوع داده‌ها
print(df.info())

# محاسبات آماری ستون‌های عددی
print(df.describe())

فیلتر کردن داده‌ها

Pandas امکان انتخاب ردیف‌هایی با شرایط خاص را فراهم می‌کند:

# انتخاب ردیف‌هایی که سن آن‌ها بیشتر از 25 است
adults = df[df['سن'] > 25]
print(adults)

گروه‌بندی داده‌ها

گروه‌بندی (GroupBy) برای تحلیل آماری دسته‌ای از داده‌ها بسیار کاربردی است:

# گروه‌بندی بر اساس نام و محاسبه میانگین سن
grouped = df.groupby('نام')['سن'].mean()
print(grouped)

محاسبات آماری سریع

Pandas متدهای متنوعی برای محاسبات آماری فراهم می‌کند:

# بیشینه و کمینه سن
print(df['سن'].max())
print(df['سن'].min())

# میانگین و انحراف معیار
print(df['سن'].mean())
print(df['سن'].std())

این ابزارها امکان استخراج بینش‌های اولیه و شناسایی روندهای مهم در داده‌ها را فراهم می‌کنند و پایه‌ی تحلیل‌های پیچیده‌تر مانند مصورسازی و مدل‌سازی داده‌ها هستند.

ادغام و ترکیب داده‌ها در Pandas

در پروژه‌های واقعی، داده‌ها معمولاً در چندین منبع یا فایل مختلف پراکنده هستند. Pandas ابزارهای قدرتمندی برای ادغام و ترکیب داده‌ها فراهم می‌کند تا تحلیل یکپارچه ممکن شود.

استفاده از concat برای ترکیب DataFrame‌ها

متد concat برای چسباندن چند DataFrame به صورت عمودی یا افقی کاربرد دارد:

df1 = pd.DataFrame({'نام': ['علی', 'سارا'], 'سن': [25, 28]})
df2 = pd.DataFrame({'نام': ['مهدی', 'لیلا'], 'سن': [22, 30]})

# ترکیب عمودی
df_combined = pd.concat([df1, df2], ignore_index=True)
print(df_combined)

ادغام داده‌ها با merge

برای ترکیب داده‌ها بر اساس یک یا چند ستون مشترک، از merge استفاده می‌کنیم:

df_info = pd.DataFrame({'نام': ['علی', 'سارا', 'مهدی'], 'شهر': ['تهران', 'شیراز', 'اصفهان']})

# ادغام بر اساس ستون "نام"
df_merged = pd.merge(df_combined, df_info, on='نام', how='left')
print(df_merged)
  • how='left' تضمین می‌کند که تمام ردیف‌های DataFrame اصلی حفظ شوند.
  • گزینه‌های دیگر: 'right', 'inner', 'outer' برای کنترل نوع ادغام.

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

برای افزودن اطلاعات جدید به DataFrame می‌توان از روش‌های ساده استفاده کرد:

# اضافه کردن ستون جدید
df_merged['تعداد_دوستان'] = [5, 3, 4, 2]
print(df_merged)

# اضافه کردن یک ردیف جدید
new_row = pd.DataFrame({'نام': ['حسین'], 'سن': [27], 'شهر': ['مشهد'], 'تعداد_دوستان': [6]})
df_final = pd.concat([df_merged, new_row], ignore_index=True)
print(df_final)

جمع‌بندی

کتابخانه‌ی Pandas ابزار کلیدی برای تحلیل و پاکسازی داده‌ها در پایتون است. با استفاده از امکانات آن، می‌توان داده‌های خام و پراکنده را به مجموعه‌ای منظم و آماده تحلیل تبدیل کرد، روندهای آماری را شناسایی کرد و داده‌ها را برای مراحل پیشرفته‌تر مانند مصورسازی یا مدل‌سازی آماده نمود.

نکات کلیدی که باید همواره مد نظر قرار گیرد:

  1. پاکسازی داده‌ها اولین و مهم‌ترین مرحله است: حذف یا جایگزینی مقادیر گمشده، حذف داده‌های تکراری و اصلاح فرمت‌ها از بروز خطا در تحلیل جلوگیری می‌کند.

  2. تحلیل داده‌ها با ابزارهای داخلی Pandas ساده و سریع است: محاسبات آماری، فیلتر، گروه‌بندی و خلاصه‌سازی داده‌ها امکان استخراج بینش‌های مهم را فراهم می‌کند.

  3. ادغام داده‌ها پایه‌ی تحلیل یکپارچه است: با استفاده از merge و concat می‌توان داده‌های پراکنده را در یک DataFrame واحد ترکیب کرد.

  4. پایبندی به ساختار منظم و مستندسازی کدها ضروری است: این کار نه تنها باعث کاهش خطا می‌شود بلکه همکاری با تیم‌های دیگر را تسهیل می‌کند.

شما میتوانید با شرکت در دوره هایی مثل آموزش رایگان برنامه نویسی پایتون و آموزش پیشرفته پایتون تمامی آموزش های مربوط به پایتون را در سطوح مختلف برای همیشه در کنار خود داشته باشید.

چه امتیازی برای این مقاله میدهید؟

خیلی بد
بد
متوسط
خوب
عالی
در انتظار ثبت رای

/@arastoo
ارسطو عباسی
کارشناس تست نرم‌افزار و مستندات

...

دیدگاه و پرسش
برای ارسال دیدگاه لازم است وارد شده یا ثبت‌نام کنید ورود یا ثبت‌نام

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

ارسطو عباسی

کارشناس تست نرم‌افزار و مستندات