FA-TOOLS — Header Component

آموزش pandas برای مبتدیان — DataFrame و Series

سلام رفیق برنامه‌نویس! اگه دلت می‌خواد وارد دنیای جذاب تحلیل داده بشی و با Python کار کنی، بدون شک Pandas یه ابزار حیاتیه که باید تو جعبه ابزارت باشه. این مقاله قراره راهنمای جامع و دوستانه تو برای شروع کار با دو تا از مهم‌ترین ساختارهای داده‌ای Pandas یعنی DataFrame و Series باشه. آماده‌ای که قدرت داده‌ها رو حس کنی؟

قبل از اینکه بریم سراغ جزئیات، یه خبر خوب: برای اینکه کار تحلیل داده و برنامه‌نویسی برات شیرین‌تر بشه، می‌تونی از کلی ابزارها و اسنیپت‌های کاربردی ما دیدن کنی و کدنویسی رو برای خودت راحت‌تر از همیشه بسازی. مطمئن باش کلی چیز بدردبخور اونجا پیدا می‌کنی!.

نقشه راه یادگیری Pandas برای مبتدیان (یک نگاه کلی)

┌───────────────────────────────────────┐
│     🚀  شروع با Pandas: نقشه راه     │
├─────────────────┬─────────────────────┤
│   💡 مفاهیم پایه   │   🛠️ کاربرد عملی    │
├─────────────────┼─────────────────────┤
│ 1️⃣ Pandas چیست؟   │   نصب و وارد کردن    │
│                 │   (pip & import)     │
├─────────────────┼─────────────────────┤
│ 2️⃣ Series:       │   ساخت: لیست، دیکشنری │
│    تک ستون و ایندکس │   عملیات: دسترسی، فیلتر│
├─────────────────┼─────────────────────┤
│ 3️⃣ DataFrame:    │   ساخت: دیکشنری، CSV  │
│    جدول داده‌ای   │   بررسی: head, info   │
├─────────────────┼─────────────────────┤
│ 4️⃣ کار با DataFrame│   انتخاب (loc, iloc)  │
│    (ستون و سطر)   │   افزودن/حذف ستون    │
├─────────────────┼─────────────────────┤
│ 5️⃣ تمیز کردن داده │   NaN: پر کردن/حذف   │
│                 │   تکراری‌ها: حذف       │
├─────────────────┼─────────────────────┤
│ 6️⃣ مثال عملی     │   تحلیل فروش ساده     │
│                 │   (groupby, sum)     │
├─────────────────┼─────────────────────┤
│ 7️⃣ نکات و ترفندها │   عیب‌یابی مشکلات رایج │
│                 │   منابع بیشتر        │
└─────────────────┴─────────────────────┘
        

پانداز چیست و چرا باید یادش بگیریم؟

ببین رفیق، Pandas یه کتابخونه پایتونیه که برای کار با داده‌ها مثل آب خوردن به کمکت میاد. فکر کن یه عالمه داده نامرتب داری و می‌خوای اونا رو مرتب کنی، فیلتر کنی، تحلیل کنی و ازشون نتیجه بگیری. Pandas دقیقاً همون ابزاریه که کار رو برات ساده می‌کنه. اسمش هم از “Panel Data” و “Python Data Analysis” گرفته شده.

چرا مهمه؟ چون تو دنیای امروز، داده حرف اول رو می‌زنه. از تحلیل فروش یه شرکت گرفته تا بررسی الگوهای بیماری، همه جا با داده سر و کار داریم. Pandas بهت کمک می‌کنه:

  • داده‌ها رو از منابع مختلف (مثل فایل‌های CSV، اکسل، پایگاه داده) بخونی و وارد Python کنی.
  • داده‌ها رو تمیز کنی (مقادیر گمشده رو پر کنی یا حذف کنی، تکراری‌ها رو پیدا کنی).
  • داده‌ها رو تغییر شکل بدی، دستکاری کنی و عملیات ریاضی روشون انجام بدی.
  • داده‌ها رو گروه بندی کنی و خلاصه‌ای ازشون بدست بیاری.
  • و در نهایت، داده‌های آماده رو برای مدل‌سازی یا بصری‌سازی به کتابخانه‌های دیگه بفرستی.

در یک کلام، اگه می‌خوای یه دیتا ساینتیست، تحلیلگر داده یا حتی یه برنامه‌نویس بک‌اند قوی باشی که با داده‌ها خوب کار می‌کنه، Pandas یه مهارت ضروریه.

شروع کار با Pandas: نصب و وارد کردن

آموزش pandas برای مبتدیان — DataFrame و Series — تصویر 2

مثل هر کتابخونه پایتونی دیگه، اول باید Pandas رو نصب کنی. اگه پایتون رو نصب داری، این کار خیلی سادست:

pip install pandas

بعد از نصب، برای اینکه بتونی ازش تو کدات استفاده کنی، باید واردش کنی:

import pandas as pd

معمولاً Pandas رو با اسم مستعار pd وارد می‌کنن. این یه قرارداد رایجه که کار رو راحت‌تر می‌کنه.

Series: ستون فقرات داده‌ها

آموزش pandas برای مبتدیان — DataFrame و Series — تصویر 3

Series چیست؟

تصور کن یه ستون از یه جدول داری. این ستون می‌تونه شامل اسم افراد، سن، یا امتیازاتشون باشه. Series تو Pandas دقیقاً همینه: یه آرایه تک‌بعدی که می‌تونه هر نوع داده‌ای رو (اعداد صحیح، اعشاری، رشته‌ها، آبجکت‌ها) نگه داره. هر Series یه ایندکس (Index) هم داره که شبیه به برچسب‌های سطرها عمل می‌کنه و به صورت پیش‌فرض از 0 شروع می‌شه، دقیقاً مثل لیست‌های پایتون.

تفاوت اصلیش با آرایه‌های NumPy اینه که Series می‌تونه ایندکس‌های لیبل‌دار داشته باشه که خوندن و کار با داده‌ها رو خیلی آسون‌تر می‌کنه.

ساخت یک Series

می‌تونیم یه Series رو از چند روش مختلف بسازیم:

  • از لیست Python:

import pandas as pd

لیست_اعداد = [10, 20, 30, 40, 50]
سری_من = pd.Series(لیست_اعداد)
print(سری_من)
# خروجی:
# 0    10
# 1    20
# 2    30
# 3    40
# 4    50
# dtype: int64
    
  • از دیکشنری Python (با ایندکس دلخواه):

دیکشنری_نمرات = {'علی': 18, 'زهرا': 19, 'محمد': 17}
سری_نمرات = pd.Series(دیکشنری_نمرات)
print(سری_نمرات)
# خروجی:
# علی      18
# زهرا     19
# محمد     17
# dtype: int64
    

عملیات پایه روی Series

حالا که یه Series داریم، بیاید ببینیم چطوری میشه باهاش کار کرد:

  • دسترسی به المان‌ها (Indexing): با استفاده از ایندکس عددی یا لیبل.

print(سری_نمرات['علی']) # خروجی: 18
print(سری_نمرات[0])  # خروجی: 18 (اگه ایندکس عددی باشه)
    
  • تکه کردن (Slicing): برای انتخاب چند المان متوالی.

print(سری_نمرات['علی':'محمد']) # ایندکس لیبل‌دار شامل انتها هم می‌شود
# خروجی:
# علی      18
# زهرا     19
# محمد     17
# dtype: int64

print(سری_من[0:2]) # ایندکس عددی انتها را شامل نمی‌شود
# خروجی:
# 0    10
# 1    20
# dtype: int64
    
  • فیلتر کردن (Boolean Indexing): انتخاب المان‌ها بر اساس یک شرط.

نمرات_بالای_۱۷ = سری_نمرات[سری_نمرات > 17]
print(نمرات_بالای_۱۷)
# خروجی:
# علی      18
# زهرا     19
# dtype: int64
    
  • عملیات ریاضی: می‌تونی به راحتی عملیات ریاضی رو روی کل Series انجام بدی.

سری_من_ضربدر_دو = سری_من * 2
print(سری_من_ضربدر_دو)
# خروجی:
# 0     20
# 1     40
# 2     60
# 3     80
# 4    100
# dtype: int64
    

DataFrame: کارخانه داده‌ها

DataFrame چیست؟

اگه Series یه ستون از یه جدول بود، DataFrame خودش یه جدول کامله! فکر کن به یه صفحه گسترده (Spreadsheet) مثل اکسل یا یه جدول تو پایگاه داده (Database). یه DataFrame از چندین Series تشکیل شده که هر Series یه ستون از اون جدول رو تشکیل میده. هر DataFrame هم یه ایندکس سطر (Row Index) و یه ایندکس ستون (Column Index یا همون اسم ستون‌ها) داره. این ساختار دو بعدی و قدرتمند، مرکز فعالیت‌های تحلیل داده تو Pandas ئه.

ساخت یک DataFrame

مثل Series، راه‌های مختلفی برای ساخت DataFrame وجود داره:

  • از دیکشنری لیست‌ها/آرایه‌ها: هر کلید دیکشنری اسم یه ستون میشه و مقدارش یه لیست یا آرایه برای داده‌های اون ستون.

داده_ها = {
    'نام': ['علی', 'زهرا', 'محمد', 'سارا'],
    'سن': [25, 30, 22, 28],
    'شهر': ['تهران', 'اصفهان', 'شیراز', 'تهران']
}
دیتافریم_افراد = pd.DataFrame(داده_ها)
print(دیتافریم_افراد)
# خروجی:
#      نام  سن      شهر
# 0     علی  25    تهران
# 1    زهرا  30   اصفهان
# 2   محمد  22    شیراز
# 3    سارا  28    تهران
    
  • از لیست دیکشنری‌ها: هر دیکشنری یه سطر از DataFrame رو تشکیل میده.

لیست_دیکشنری_ها = [
    {'نام': 'رضا', 'سن': 35, 'شهر': 'مشهد'},
    {'نام': 'مریم', 'سن': 29, 'شهر': 'تبریز'},
]
دیتافریم_جدید = pd.DataFrame(لیست_دیکشنری_ها)
print(دیتافریم_جدید)
# خروجی:
#    نام  سن    شهر
# 0   رضا  35   مشهد
# 1  مریم  29  تبریز
    
  • از فایل‌های خارجی (CSV/Excel): این رایج‌ترین روشه.

# فرض کن یه فایل به اسم 'data.csv' داری
# دیتافریم_از_فایل = pd.read_csv('data.csv')
# دیتافریم_از_اکسل = pd.read_excel('data.xlsx')
    

بررسی اولیه DataFrame

وقتی یه DataFrame می‌سازی یا از فایل می‌خونی، لازمه یه نگاه اولیه بهش بندازی تا ببینی چی توش هست:

  • .head(): 5 سطر اول رو نشون میده (می‌تونی تعداد رو هم مشخص کنی، مثلاً head(10)).
  • .tail(): 5 سطر آخر رو نشون میده.
  • .info(): یه خلاصه از DataFrame شامل تعداد سطرها، ستون‌ها، نوع داده هر ستون و تعداد مقادیر غیر تهی (non-null) رو میده. این خیلی به کار میاد.
  • .describe(): آمار توصیفی برای ستون‌های عددی (میانگین، انحراف معیار، حداقل، حداکثر، چارک‌ها) رو حساب می‌کنه.
  • .shape: تعداد سطرها و ستون‌ها رو به صورت (rows, columns) برمی‌گردونه.
  • .columns: لیست اسم ستون‌ها رو نشون میده.

print(دیتافریم_افراد.head())
print(دیتافریم_افراد.info())
print(دیتافریم_افراد.describe())
    

دسترسی و انتخاب داده‌ها در DataFrame

یکی از کارهای اصلی با DataFrame، انتخاب زیرمجموعه‌ای از داده‌هاست. این همونجاست که .loc و .iloc به کار میان:

  • انتخاب ستون‌ها: با استفاده از اسم ستون.

ستون_سن = دیتافریم_افراد['سن'] # یک Series برمی‌گرداند
print(ستون_سن)

چند_ستون = دیتافریم_افراد[['نام', 'شهر']] # یک DataFrame برمی‌گرداند
print(چند_ستون)
    
  • انتخاب سطرها با .loc (بر اساس لیبل/ایندکس): برای انتخاب سطرها یا ستون‌ها با استفاده از ایندکس یا اسم ستون.

# انتخاب سطر با ایندکس 0
print(دیتافریم_افراد.loc[0])

# انتخاب سطر با ایندکس 0 و 2
print(دیتافریم_افراد.loc[[0, 2]])

# انتخاب سطر 0 و 1 برای ستون‌های 'نام' و 'سن'
print(دیتافریم_افراد.loc[0:1, ['نام', 'سن']])
    
  • انتخاب سطرها با .iloc (بر اساس موقعیت عددی): برای انتخاب سطرها یا ستون‌ها با استفاده از موقعیت عددی (مثل لیست‌های پایتون).

# انتخاب سطر با موقعیت 0
print(دیتافریم_افراد.iloc[0])

# انتخاب سطر با موقعیت 0 و 2
print(دیتافریم_افراد.iloc[[0, 2]])

# انتخاب سطر 0 و 1 برای ستون‌های با موقعیت 0 و 1 ('نام' و 'سن')
print(دیتافریم_افراد.iloc[0:2, 0:2])
    
  • فیلتر کردن پیشرفته (Multiple Conditions): می‌تونی چند شرط رو ترکیب کنی.

افراد_تهران_جوان = دیتافریم_افراد[(دیتافریم_افراد['شهر'] == 'تهران') & (دیتافریم_افراد['سن'] < 30)]
print(افراد_تهران_جوان)
# خروجی:
#      نام  سن    شهر
# 0     علی  25  تهران
# 3    سارا  28  تهران
    

نکته: حواست باشه که هر شرط رو باید داخل پرانتز بذاری و از & برای “و” و از | برای “یا” استفاده کنی.

عملیات روی ستون‌ها و سطرها

  • افزودن ستون جدید:

دیتافریم_افراد['وضعیت_تاهل'] = ['مجرد', 'متاهل', 'مجرد', 'متاهل']
print(دیتافریم_افراد)
    
  • حذف ستون/ردیف (drop()):

# حذف ستون 'وضعیت_تاهل' (axis=1 برای ستون، inplace=True برای اعمال تغییر در خود DataFrame)
دیتافریم_افراد.drop('وضعیت_تاهل', axis=1, inplace=True)
print(دیتافریم_افراد)

# حذف سطر با ایندکس 0
دیتافریم_افراد.drop(0, axis=0, inplace=True) # یا فقط drop(0)
print(دیتافریم_افراد)
    
  • تغییر نام ستون‌ها (rename()):

دیتافریم_افراد.rename(columns={'نام': 'Full_Name', 'سن': 'Age'}, inplace=True)
print(دیتافریم_افراد)
    
  • اعمال توابع (apply()): می‌تونی یه تابع دلخواه رو روی ستون‌ها یا سطرها اعمال کنی.

# تابع برای تبدیل شهر به حروف بزرگ
دیتافریم_افراد['شهر'] = دیتافریم_افراد['شهر'].apply(lambda x: x.upper())
print(دیتافریم_افراد)
    

پاکسازی و پیش‌پردازش داده‌ها (اولین چالش‌های شما!)

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

مدیریت مقادیر NaN (Missing Values)

مقادیر از دست رفته معمولاً با NaN (Not a Number) نمایش داده میشن. با این توابع می‌تونی باهاشون کار کنی:

  • .isnull(): یه DataFrame بولین برمی‌گردونه که True یعنی مقدار NaN و False یعنی مقدار موجود. .isnull().sum() تعداد NaN ها در هر ستون رو نشون میده.
  • .notnull(): برعکس .isnull().
  • .fillna(): برای پر کردن مقادیر NaN. می‌تونی با یه مقدار ثابت، میانگین، میانه، یا حتی مقدار قبلی/بعدی پر کنی.

# ساخت یه دیتافریم با مقادیر گمشده
data_with_nan = {'A': [1, 2, np.nan, 4], 'B': [5, np.nan, 7, 8]}
df_nan = pd.DataFrame(data_with_nan)
print("دیتافریم اولیه با NaN:")
print(df_nan)

print("nتعداد NaN در هر ستون:")
print(df_nan.isnull().sum())

# پر کردن NaN با مقدار 0
df_filled = df_nan.fillna(0)
print("nپر شده با 0:")
print(df_filled)

# پر کردن NaN در ستون 'B' با میانگین همون ستون
df_nan['B'].fillna(df_nan['B'].mean(), inplace=True)
print("nستون B پر شده با میانگین:")
print(df_nan)
    
  • .dropna(): برای حذف سطرها یا ستون‌هایی که شامل مقادیر NaN هستن.

# ساخت مجدد دیتافریم برای مثال dropna
data_with_nan = {'A': [1, 2, np.nan, 4], 'B': [5, np.nan, 7, 8]}
df_nan = pd.DataFrame(data_with_nan)

# حذف سطرها دارای NaN
df_dropped_rows = df_nan.dropna(axis=0) # axis=0 پیشفرض است
print("nحذف سطرهای دارای NaN:")
print(df_dropped_rows)

# حذف ستون‌های دارای NaN
df_dropped_cols = df_nan.dropna(axis=1)
print("nحذف ستون‌های دارای NaN:")
print(df_dropped_cols)
    

حذف تکراری‌ها (drop_duplicates())

اگه تو داده‌هات سطر تکراری داری، با این تابع می‌تونی حذفشون کنی:


import numpy as np # (اینجا بهش نیاز داریم برای np.nan)
داده_تکراری = {
    'A': [1, 2, 2, 3, 4],
    'B': ['x', 'y', 'y', 'z', 'w']
}
df_dup = pd.DataFrame(داده_تکراری)
print("دیتافریم با تکراری:")
print(df_dup)

df_unique = df_dup.drop_duplicates()
print("nدیتافریم بدون تکراری:")
print(df_unique)
    

تغییر نوع داده‌ها (astype())

گاهی اوقات Pandas نوع داده‌ها رو درست تشخیص نمیده، یا می‌خوای نوع یه ستون رو عوض کنی (مثلاً از رشته به عدد). astype() این کارو برات می‌کنه:


df_num = pd.DataFrame({'عدد_متنی': ['1', '2', '3'], 'عدد_اعشاری': [1.1, 2.2, 3.3]})
print("نوع داده اولیه:")
print(df_num.dtypes)

df_num['عدد_متنی'] = df_num['عدد_متنی'].astype(int)
df_num['عدد_اعشاری'] = df_num['عدد_اعشاری'].astype(str)
print("nنوع داده پس از تبدیل:")
print(df_num.dtypes)
    

یک مثال عملی: تحلیل فروش ساده

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


# ساخت یک DataFrame فرضی
data_sales = {
    'محصول': ['A', 'B', 'A', 'C', 'B', 'A', 'C', 'B'],
    'شهر': ['تهران', 'مشهد', 'اصفهان', 'تهران', 'تبریز', 'شیراز', 'مشهد', 'تهران'],
    'فروش': [100, 150, 120, 200, 80, 110, 180, 90],
    'تعداد': [5, 3, 4, 2, 6, 5, 3, 4]
}
df_sales = pd.DataFrame(data_sales)
print("دیتافریم فروش اولیه:")
print(df_sales)
    

محاسبه ستون جدید: “درآمد_هر_واحد”

می‌خوایم ببینیم میانگین درآمد حاصل از فروش هر واحد محصول چقدر بوده:


df_sales['درآمد_هر_واحد'] = df_sales['فروش'] / df_sales['تعداد']
print("nدیتافریم با ستون 'درآمد_هر_واحد':")
print(df_sales)
    

گروه‌بندی و جمع‌بندی (groupby, sum, mean)

حالا فرض کن می‌خوایم مجموع فروش رو به تفکیک “محصول” و “شهر” بدست بیاریم. .groupby() اینجا قهرمان ماست:


# مجموع فروش هر محصول
فروش_هر_محصول = df_sales.groupby('محصول')['فروش'].sum()
print("nمجموع فروش هر محصول:")
print(فروش_هر_محصول)
# خروجی:
# محصول
# A    330
# B    320
# C    380
# Name: فروش, dtype: int64

# میانگین فروش هر شهر
میانگین_فروش_هر_شهر = df_sales.groupby('شهر')['فروش'].mean()
print("nمیانگین فروش هر شهر:")
print(میانگین_فروش_هر_شهر)
# خروجی:
# شهر
# اصفهان    120.0
# تبریز      80.0
# تهران    130.0
# مشهد      165.0
# شیراز     110.0
# Name: فروش, dtype: float64
    

می‌تونی روی چند ستون هم groupby کنی و چندین عملیات رو همزمان انجام بدی:


گزارش_فروش_ترکیبی = df_sales.groupby(['شهر', 'محصول']).agg(
    کل_فروش=('فروش', 'sum'),
    میانگین_درآمد_واحد=('درآمد_هر_واحد', 'mean')
)
print("nگزارش فروش ترکیبی (شهر و محصول):")
print(گزارش_فروش_ترکیبی)
# خروجی:
#                   کل_فروش  میانگین_درآمد_واحد
# شهر    محصول
# اصفهان  A           120          30.000000
# تبریز   B            80          13.333333
# تهران   A           100          20.000000
#        B            90          22.500000
#        C           200         100.000000
# مشهد   B           150          50.000000
#        C           180          60.000000
# شیراز   A           110          22.000000
    

مقایسه ساختارهای داده‌ای Pandas

ویژگی DataFrame
ابعاد دو بعدی (جدول)
ستون‌ها دارد (هر ستون یک Series)
ایندکس ایندکس سطر و ستون
همگنی داده ناهمگن (هر ستون می‌تواند نوع داده متفاوتی داشته باشد)
کاربرد اصلی تحلیل داده‌های جدولی، پاکسازی و پیش‌پردازش

نکات حرفه‌ای برای یادگیری بهتر Pandas

یادگیری هر مهارت جدیدی نیاز به تمرین و پشتکار داره. برای Pandas هم این قضیه فرق نمی‌کنه:

  • تمرین مداوم: سعی کن پروژه‌های کوچیک تعریف کنی یا دیتاست‌های آماده رو از سایت‌هایی مثل Kaggle دانلود کنی و باهاشون کار کنی. هرچه بیشتر دست به کد بشی، مفهوم‌ها بهتر جا میفتن.
  • مستندات رسمی: مستندات رسمی Pandas یه گنجینه‌ست! اگه با تابعی مشکل داشتی یا می‌خواستی ببینی یه کار خاص چطوری انجام میشه، حتماً بهش سر بزن.
  • انجمن‌های آنلاین: Stack Overflow، فروم‌های ردیت مثل r/learnpython یا r/datascience منابع عالی برای پرسیدن سوالات و یادگیری از تجربیات دیگران هستن.
  • لینک‌های داخلی و منابع پایتون: برای عمیق‌تر شدن تو دنیای پایتون و ابزارهای مرتبط، می‌تونی از اسنیپت‌ها و کدهای آماده پایتون ما هم استفاده کنی. کلی ترفند و الگوی آماده اونجا پیدا می‌کنی که سرعت کدنویسیت رو می‌بره بالا.
  • منابع عمومی اسنیپت: برای برنامه‌نویس‌های حرفه‌ای، داشتن یک آرشیو اسنیپت قوی خیلی مهم است. حتماً سری به صفحه اصلی اسنیپت‌های ما بزن تا ابزارهای کاربردی برای تمام زبان‌های برنامه‌نویسی را پیدا کنی.
  • اصطلاحات را فراموش نکنید: یادگیری اصطلاحات تخصصی در کنار کدهای پایتون به شما کمک می‌کند تا هم در تیم‌ها و هم در منابع انگلیسی بهتر عمل کنید.

عیب‌یابی سریع: مشکلات رایج در Pandas و راه‌حل‌ها

هیچ کس از خطاها خوشش نمیاد، ولی اونا جزئی از زندگی برنامه‌نویسی‌ان! در اینجا به چند تا از خطاهای رایج تو Pandas و چطوری حلشون کنی اشاره می‌کنم:

1. KeyError (ستون یا ایندکس اشتباه)

این خطا وقتی پیش میاد که داری به یه ستون یا ایندکس دسترسی پیدا می‌کنی که وجود نداره.

  • مشکل: df['ستون_غلط'] یا df.loc[اینکدس_غلط]
  • راه‌حل:
    • مطمئن شو که اسم ستون رو درست و با حروف بزرگ و کوچک دقیق (case-sensitive) نوشتی.
    • از df.columns برای دیدن لیست دقیق ستون‌ها استفاده کن.
    • برای ایندکس‌ها، مطمئن شو که ایندکس مورد نظر تو DataFrame وجود داره.

2. SettingWithCopyWarning

این هشدار وقتی میاد که داری روی یه “view” یا “کپی” از DataFrame تغییر ایجاد می‌کنی، ولی Pandas مطمئن نیست که آیا تغییرات تو DataFrame اصلی اعمال میشه یا نه. این یه اخطار جدی نیست ولی می‌تونه باعث باگ‌های عجیب بشه.

  • مشکل: df[df['سن'] > 30]['شهر'] = 'جدید'
  • راه‌حل: همیشه از .loc برای انتخاب و انتساب استفاده کن تا مطمئن بشی روی خود DataFrame اصلی کار می‌کنی:
    
    df.loc[df['سن'] > 30, 'شهر'] = 'جدید'
                

    یا اگه می‌خوای یه کپی صریح داشته باشی:

    
    df_copy = df[df['سن'] > 30].copy()
    df_copy['شهر'] = 'جدید'
                

3. Data Type Mismatch (ناسازگاری نوع داده)

این مشکل وقتی پیش میاد که بخوای روی یه ستون عملیات عددی انجام بدی ولی نوعش رشته باشه، یا برعکس.

  • مشکل: تلاش برای جمع کردن دو ستون که یکی عدده و دیگری رشته‌ای شبیه به عدد.
  • راه‌حل: از df['ستون'].astype(int) یا df['ستون'].astype(float) برای تبدیل نوع داده استفاده کن. قبل از تبدیل، مطمئن شو که همه مقادیر واقعاً قابل تبدیل هستن، وگرنه خطا می‌گیری. می‌تونی از pd.to_numeric() با پارامتر errors='coerce' هم استفاده کنی که مقادیر غیرقابل تبدیل رو به NaN تبدیل می‌کنه.

4. NaNs everywhere! (پر شدن داده با NaN)

گاهی اوقات بعد از خوندن یه فایل، می‌بینی که کلی از داده‌هات NaN شدن. این معمولاً به خاطر مشکل تو فایل اصلی یا پارامترهای نادرست در تابع read_csv یا read_excel است.

  • مشکل: فایل CSV با جداکننده (delimiter) ویرگول نیست، ولی تو با read_csv() بدون مشخص کردن جداکننده می‌خونیش.
  • راه‌حل:
    • فایل رو با یه ویرایشگر متن باز کن و جداکننده‌اش (مثل ; یا t) رو پیدا کن. بعد تو read_csv() از پارامتر sep=';' استفاده کن.
    • مطمئن شو که فایل کدینگ (encoding) مناسبی داره (مثلاً encoding='utf-8' یا encoding='latin1').
    • اگر ستون‌ها هدر ندارند، header=None رو به read_csv() اضافه کن.

نیاز به کمک تخصصی‌تر داری؟

اگه با مشکلی مواجه شدی که اینجا نبود یا نیاز به راهنمایی بیشتری داری، تردید نکن و با ما تماس بگیر!

📞 09202232789

امیدوارم این راهنمای جامع و دوستانه، نقطه شروع قدرتمندی برات تو دنیای Pandas باشه. یادت باشه، رمز موفقیت تو برنامه‌نویسی تمرین، تمرین و باز هم تمرینه! اگه سوالی داشتی یا نیاز به توضیحات بیشتر بود، حتماً کامنت بذار یا با ما در تماس باش. کدنویسی رو به بهترین شکل انجام بده!

Table of Contents

آخرین نوشته‌ها