پاک سازی سلول های خالی (Cleaning Empty Cells)
در این بخش می خواهیم پاک سازی سلول های خالی در pandas را یاد بگیریم. سلول های خالی می توانند نتیجه تحلیل را کاملاً عوض کنند و ما را گمراه کنند.
چرا پاک سازی سلول های خالی مهم است؟
سلول خالی (Empty Cell) یعنی خانه ای در جدول که مقدار ندارد. وقتی چنین خانه هایی زیاد باشند، میانگین، نمودار و تصمیم ها اشتباه می شوند؛ مثل امتحانی که چند سؤال بدون جواب بماند.
برای همین، در پاک سازی داده با pandas باید اول سلول های خالی را پیدا کنیم و درباره حذف یا جایگزینی آن ها تصمیم بگیریم.
حذف ردیف های دارای سلول خالی با dropna()
یک راه ساده برای پاک سازی سلول های خالی این است که ردیف های دارای مقدار خالی را کامل حذف کنیم. چون مجموعه داده ها معمولاً بزرگ هستند، حذف چند ردیف معمولاً نتیجه کلی را خراب نمی کند.
در مثال منبع، یک DataFrame جدید می سازیم که هیچ سلول خالی ندارد. برای این کار از متد dropna() استفاده می کنیم.
import pandas as pd
df = pd.read_csv('data.csv')
new_df = df.dropna()
print(new_df.to_string())
نکته: به صورت پیش فرض، dropna() یک DataFrame جدید برمی گرداند و DataFrame اصلی را عوض نمی کند.
اگر می خواهی خود DataFrame اصلی تمیز شود، باید از آرگومان (Argument) inplace=True استفاده کنی. در این حالت چیزی برنمی گردد و خود df اصلاح می شود.
import pandas as pd
df = pd.read_csv('data.csv')
df.dropna(inplace=True)
print(df.to_string())
نکته: وقتی از dropna(inplace=True) استفاده می کنی، همه ردیف های دارای مقدار خالی از DataFrame اصلی حذف می شوند و DataFrame جدیدی برگردانده نمی شود.
جایگزین کردن مقدار به جای سلول خالی با fillna()
حذف ردیف ها همیشه بهترین راه نیست؛ شاید داده های دیگر آن ردیف مهم باشند. راه دوم این است که به جای سلول خالی، یک مقدار جدید قرار بدهیم تا ردیف حفظ شود.
متد fillna() سلول های خالی را با مقداری که می دهی پر می کند. در مثال منبع، همه مقادیر خالی با عدد 130 جایگزین می شوند.
import pandas as pd
df = pd.read_csv('data.csv')
df.fillna(130, inplace=True)
کد بالا تمام سلول های خالی در کل DataFrame را با 130 پر می کند. اما گاهی فقط می خواهیم یک ستون مشخص، مثل Calories، مقدار جایگزین بگیرد.
برای این کار، در fillna() یک دیکشنری می دهیم و ستون هدف را با نام آن مشخص می کنیم.
import pandas as pd
df = pd.read_csv('data.csv')
df.fillna({"Calories": 130}, inplace=True)
استفاده از میانگین، میانه و نما برای جایگزینی
یک روش هوشمندتر برای پاک سازی سلول های خالی این است که از آمار ساده استفاده کنیم. در منبع، سه روش معرفی شده است: میانگین (Mean)، میانه (Median) و نما (Mode).
Mean یعنی متوسط اعداد؛ یعنی مجموع همه مقدارها تقسیم بر تعداد آن ها. در مثال، میانگین ستون Calories حساب می شود و همان مقدار جایگزین سلول های خالی همان ستون می شود.
import pandas as pd
df = pd.read_csv('data.csv')
x = df["Calories"].mean()
df.fillna({"Calories": x}, inplace=True)
Median یعنی عدد وسط، وقتی مقدارها را از کوچک به بزرگ مرتب می کنی. اگر داده ها خیلی خارج از محدوده باشند، استفاده از میانه می تواند نتیجه منطقی تری بدهد.
import pandas as pd
df = pd.read_csv('data.csv')
x = df["Calories"].median()
df.fillna({"Calories": x}, inplace=True)
Mode یعنی مقداری که بیشترین تکرار را دارد. در pandas متد mode() یک سری از مقدارهای پرتکرار برمی گرداند و با [0] اولین مقدار را برمی داریم.
import pandas as pd
df = pd.read_csv('data.csv')
x = df["Calories"].mode()[0]
df.fillna({"Calories": x}, inplace=True)
این سه روش کمک می کنند سلول های خالی را منطقی تر پر کنیم، مخصوصاً وقتی نمی خواهیم ردیف ها را حذف کنیم و پاک سازی داده را دقیق تر انجام می دهیم.
گام های پیشنهادی برای پاک سازی سلول های خالی
- با استفاده از تحلیل داده و متدهایی مثل
info()وhead()سلول های خالی را پیدا کن. - تصمیم بگیر کجا حذف ردیف با
dropna()منطقی است و کجا نه. - برای ستون های مهم، به جای حذف، از
fillna()و یک مقدار ثابت یا آماری استفاده کن. - اگر داده نسبت به مقدارهای پرت حساس است، میانه یا نما را به جای میانگین انتخاب کن.
- بعد از پاک سازی، دوباره DataFrame را بررسی کن تا مطمئن شوی مقدار خالی نمانده است.
جمع بندی سریع
- پاک سازی سلول های خالی در pandas برای جلوگیری از نتایج اشتباه ضروری است.
dropna()ردیف های دارای مقدار خالی را حذف می کند؛ باinplace=Trueروی خود DataFrame.fillna()مقدار جدید در سلول های خالی می گذارد، می تواند فقط یک ستون را هدف بگیرد.- میانگین، میانه و نما سه روش رایج برای پر کردن سلول های خالی هستند.
- همیشه بعد از پاک سازی، جدول را دوباره بررسی کن تا مطمئن شوی همه چیز درست است.