دادههای گمشده
برخورد با مقادیر گمشده (NaN): تشخیص، تصمیم حذف یا پرکردن، روشهای fillna و dropna و قواعد انتخاب روش درست
مشکل داده گمشده
در داده واقعی، همیشه بعضی مقادیر خالی هستند: کاربری سن را وارد نکرده، سنسور لحظهای از کار افتاده یا فرمی اجباری نبوده است. در pandas این مقادیر با NaN (Not a Number) نمایش داده میشوند. مشکل بزرگ: NaN مسری است؛ هر محاسبهای که به آن برسد، خودش هم NaN میشود!
گام ۱: تشخیص
df.isnull().sum() # تعداد گمشده در هر ستون
df.isnull().mean() # درصد گمشده در هر ستون
در پایتون خالص، مقادیر None یا رشته خالی را با is None یا == "" میبینیم.
گام ۲: تحلیل الگو
قبل از هر اقدامی بپرسید: چرا این داده غایب است؟
- کاملاً تصادفی: مثل خطای لحظهای سنسور ← حذف یا پرکردن مشکلی ندارد
- وابسته به مقدار دیگر: مثلاً درآمد افراد ثروتمند بیشتر پنهان میشود ← حذف، نتیجه را بایاس میکند!
- ساختاری: مثلاً ستون «تاریخ ازدواج» برای مجردها خالی است ← خالی بودن خودش اطلاعات است!
گام ۳: انتخاب روش
روش ۱: حذف (dropna)
df = df.dropna() # حذف سطرهای دارای گمشده
df = df.dropna(subset=["age"]) # فقط اگر age گمشده بود
کی مناسب است؟ وقتی تعداد گمشدهها کم (زیر ۵٪) و تصادفی است.
خطر: اگر ستونی ۴۰٪ گمشده داشته باشد، حذف یعنی از دستدادن نیمی از داده!
روش ۲: پرکردن (fillna)
# پرکردن با میانگین (برای داده عددی متقارن)
df["age"] = df["age"].fillna(df["age"].mean())
# پرکردن با میانه (وقتی داده پرت دارد)
df["income"] = df["income"].fillna(df["income"].median())
# پرکردن با مد (برای داده دستهای)
df["city"] = df["city"].fillna(df["city"].mode()[0])
# پرکردن با مقدار ثابت
df["score"] = df["score"].fillna(0)
روش ۳: روشهای پیشرفته (اشاره)
پرکردن هوشمند با مدل (مثل KNN یا رگرسیون) یا روش forward/backward fill برای دادههای سری زمانی:
df["price"] = df["price"].ffill() # مقدار قبلی معتبر را تکرار کن
جدول راهنمای انتخاب روش
| وضعیت | روش پیشنهادی |
|---|---|
| گمشده کمتر از ۵٪ و تصادفی | حذف سطر (dropna) |
| ستون عددی متقارن | پرکردن با میانگین |
| ستون عددی دارای پرت/کج | پرکردن با میانه |
| ستون دستهای | پرکردن با مد یا دسته «نامشخص» |
| سری زمانی | ffill / bfill |
| گمشده بیش از ۴۰-۵۰٪ ستون | حذف کل ستون! |
جمعبندی
- NaN مسری است و باید قبل از تحلیل مدیریت شود
- اول «چرایی» گمشده را بفهمید: تصادفی، وابسته یا ساختاری
- حذف برای گمشده کم و تصادفی؛ پرکردن با میانه/میانگین/مد بسته به نوع ستون
- ستون با گمشده خیلی زیاد را کلاً حذف کنید
این مبحث بخشی از دوره آموزش کامل علم داده است.