Pandas

Pandas — اصلاح داده های اشتباه (Cleaning Wrong Data)

آخرین بروزرسانی: 1404/08/28

اصلاح داده های اشتباه (Cleaning Wrong Data)

گاهی توی دیتاست pandas بعضی مقدارها فقط اشتباه اند، نه خالی اند و نه فرمتشان مشکل دارد. در این صفحه درباره اصلاح داده های اشتباه در pandas حرف می زنیم تا تحلیل هایت مثل کارنامه منظم باشد، نه دفتر شلوغ!

داده های اشتباه در pandas یعنی چه؟

داده اشتباه (Wrong Data) یعنی مقداری که با انتظار ما جور نیست. مثلاً همه زمان ها بین 30 تا 60 دقیقه هستند، اما یک ردیف ناگهان 450 دقیقه شده است.

در دیتاست مثال، در ردیف 7 ستون Duration برابر 450 است. چون این داده مربوط به تمرین ورزشی است، منطقی نیست کسی 450 دقیقه یک ضرب تمرین کند.

پس با تکیه روی «دانش موضوعی» می فهمیم این مقدار احتمالاً اشتباه یا تایپ غلط است.

اصلاح داده های اشتباه با جایگزینی مقدار

ساده ترین راه اصلاح داده های اشتباه در pandas این است که مقدار درست را جایگزین کنیم. در مثال منبع، حدس می زنیم مقدار درست برای Duration در ردیف 7 عدد 45 است، نه 450.

برای تغییر مقدار یک سلول خاص، از loc استفاده می کنیم. loc یعنی انتخاب بر اساس برچسب سطر و نام ستون.

import pandas as pd

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

df.loc[7, "Duration"] = 45

print(df.to_string())

مشاهده در ادیتور

اینجا عدد 7 همان ایندکس (Index) ردیف است. ستون هم با نام "Duration" مشخص شده است. بعد از اجرا، مقدار اشتباه جای خودش را به مقدار منطقی 45 می دهد.

نکته: این روش برای دیتاست کوچک خوب است؛ می توانی موردی اصلاح کنی.

استفاده از قانون برای اصلاح داده های زیاد

وقتی دیتاست بزرگ می شود، اصلاح تکی خسته کننده و سخت است. پس برای اصلاح داده های اشتباه در pandas بهتر است قانون بسازیم.

مثلاً می گوییم هر مدت زمانی بیشتر از 120 دقیقه، برای این نوع تمرین غیرمنطقی است. پس همه مقدارهای بزرگ تر از 120 را تبدیل به 120 می کنیم.

for x in df.index:
  if df.loc[x, "Duration"] > 120:
    df.loc[x, "Duration"] = 120

مشاهده در ادیتور

اینجا روی همه ایندکس ها حلقه می زنیم. اگر مقدار ستون Duration از 120 بیشتر بود، آن را 120 می کنیم.

این کار شبیه قانون مدرسه است؛ مثلاً نمره ها را بین 0 تا 20 نگه می داری و هر چیز بیرون این بازه را اصلاح می کنی.

حذف ردیف های دارای داده اشتباه

گاهی اصلاً حوصله یا امکان اصلاح مقدار اشتباه را نداریم. در این حالت، می توانیم کل ردیف را حذف کنیم.

اگر دیتاست بزرگ است، حذف چند ردیف معمولاً به نتیجه کلی صدمه جدی نمی زند. اما همچنان باید با فکر تصمیم بگیری.

for x in df.index:
  if df.loc[x, "Duration"] > 120:
    df.drop(x, inplace=True)

مشاهده در ادیتور

در این کد، اگر مقدار Duration برای یک ردیف از 120 بیشتر باشد، آن ردیف را حذف می کنیم.

نکته: چون inplace=True است، حذف روی خود DataFrame اعمال می شود و DataFrame جدیدی برنمی گردد.

گام های پیشنهادی برای اصلاح داده های اشتباه در pandas

  1. با نگاه کردن به head() و info() از بخش تحلیل داده مقدارهای مشکوک را پیدا کن.
  2. بر اساس منطق مسئله، محدوده منطقی برای هر ستون را مشخص کن.
  3. برای دیتاست کوچک، مقدارهای اشتباه را با df.loc[ردیف, ستون] دستی اصلاح کن.
  4. برای دیتاست بزرگ، با حلقه یا روش های برداری، مقدارهای خارج از محدوده را اصلاح یا محدود کن.
  5. اگر اصلاح مقدار سخت است و دیتاست بزرگ است، ردیف های خیلی عجیب را حذف کن و بعد به مراحل دیگر پاک سازی داده برو.

جمع بندی سریع

  • اصلاح داده های اشتباه در pandas یعنی مقدارهای غیرمنطقی را درست یا حذف کنیم.
  • برای دیتاست کوچک می توانی مقدار تک سلول را با loc تغییر دهی.
  • برای دیتاست بزرگ بهتر است قانون بسازی و روی کل ستون اعمال کنی.
  • می توانی مقدارهای خارج از محدوده را محدود یا ردیف ها را کامل حذف کنی.
  • بعد از اصلاح داده های اشتباه، نتایج تحلیل قابل اعتمادتر و منطقی تر می شوند.