از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
حذف مقادیر NaN در Pandas DataFrame
سرفصلهای مطلب
معرفی
هنگام کار با داده ها در پایتون، مواجهه با مقادیر از دست رفته یا تهی که اغلب به صورت NaN نشان داده می شوند، غیر معمول نیست. در این بایت، خواهیم دید که چگونه این مقادیر NaN را در چارچوب یک Pandas DataFrame مدیریت کنیم، به ویژه با تمرکز روی روش شناسایی و رها کردن ردیف هایی با مقادیر NaN در یک ستون خاص.
مقادیر NaN در پایتون
در پایتون، NaN مخفف “Not a Number” است و یک مقدار ممیز شناور خاص است که به هیچ نوع دیگری غیر از float قابل تبدیل نیست. تحت کتابخانه NumPy تعریف شده است و برای نمایش داده های گم شده یا تعریف نشده استفاده می شود.
توجه به این نکته مهم است که NaN است نه معادل صفر یا هر عدد دیگری. در واقع NaN حتی با خودش برابر نیست. به عنوان مثال، اگر NaN را با NaN مقایسه کنید، نتیجه خواهد بود False
.
import numpy as np
print(np.nan == np.nan)
DataFrame چیست؟
DataFrame یک ساختار داده با برچسب دوبعدی با ستونهایی است که میتوانند انواع بالقوه متفاوتی داشته باشند، مانند صفحه گسترده یا جدول SQL یا فرهنگ لغت اشیاء سری. این یکی از ساختارهای داده اولیه در پانداها است و بنابراین اغلب برای دستکاری و تجزیه و تحلیل داده ها در پایتون استفاده می شود. میتوانید DataFrame را از انواع دادههای مختلف مانند dict، list، set و از سری نیز ایجاد کنید.
import pandas as pd
data = {'Name': ('John', 'Anna', 'Peter', 'Linda'),
'Age': (28, 24, 35, np.nan)}
df = pd.DataFrame(data)
print(df)
این خروجی خواهد داشت:
Name Age
0 John 28.0
1 Anna 24.0
2 Peter 35.0
3 Linda NaN
چرا مقادیر NaN را از یک DataFrame حذف کنید؟
مقادیر NaN میتوانند هنگام انجام تجزیه و تحلیل دادهها یا ساختن مدلهای یادگیری ماشین مشکل ساز شوند، زیرا میتوانند منجر به نتایج نادرست یا نادرست شوند. در حالی که روش هایی برای پر کردن مقادیر NaN با یک مقدار خاص یا یک مقدار درونیابی وجود دارد، گاهی اوقات ساده ترین و موثرترین راه برای رسیدگی به آنها حذف سطرها یا ستون هایی است که حاوی آنها هستند. این به ویژه زمانی صادق است که نسبت مقادیر NaN کوچک باشد و عدم وجود آنها تأثیر قابل توجهی بر تجزیه و تحلیل شما نخواهد داشت.
روش شناسایی مقادیر NaN در یک DataFrame
قبل از شروع حذف مقادیر NaN، ابتدا ببینیم چگونه میتوانیم آنها را در DataFrame خود پیدا کنیم. برای این کار می توانید از isnull()
تابع در Pandas، که یک DataFrame از را برمی گرداند True
/False
ارزش های. True
، در این مورد، وجود یک مقدار NaN را نشان می دهد.
print(df.isnull())
این خروجی خواهد داشت:
Name Age
0 False False
1 False False
2 False False
3 False True
توجه داشته باشید: این isnull()
تابع همچنین می تواند با استفاده شود sum()
تابع برای بدست آوردن تعداد کل مقادیر NaN در هر ستون.
print(df.isnull().sum())
این خروجی خواهد داشت:
Name 0
Age 1
dtype: int64
حذف ردیف هایی با مقادیر NaN
اکنون که درک درستی از اجزای اصلی این مشکل داریم، بیایید ببینیم چگونه میتوانیم مقادیر NaN را حذف کنیم. پانداها فراهم می کند dropna()
عملکرد برای انجام این کار.
فرض کنید یک DataFrame مانند این داریم:
import pandas as pd
import numpy as np
df = pd.DataFrame({
'A': (1, 2, np.nan, 4),
'B': (5, np.nan, 7, 8),
'C': (9, 10, 11, 12)
})
print(df)
خروجی:
A B C
0 1.0 5.0 9
1 2.0 NaN 10
2 NaN 7.0 11
3 4.0 8.0 12
برای رها کردن ردیف هایی با مقادیر NaN، می توانیم از:
df = df.dropna()
print(df)
خروجی:
A B C
0 1.0 5.0 9
3 4.0 8.0 12
این به خوبی کار می کند که شما آن را می نامید روی شی واقعی DataFrame، استفاده از آن را آسان و کمتر مستعد خطا می کند. با این حال، چه میشود اگر نخواهیم از شر هر ردیف حاوی NaN خلاص شویم، اما در عوض ترجیح میدهیم از شر آن خلاص شویم. ستون که حاوی آن است. ما آن را در بخش بعدی نشان خواهیم داد.
رها کردن ستون هایی با مقادیر NaN
به طور مشابه، ممکن است بخواهید به جای ردیف، ستون هایی با مقادیر NaN رها کنید. دوباره، dropna()
تابع را می توان برای این منظور استفاده کرد، اما با یک پارامتر متفاوت. به صورت پیش فرض، dropna()
ردیف ها را رها می کند برای رها کردن ستون ها، باید ارائه دهید axis=1
.
بیایید از همان DataFrame فوق استفاده کنیم:
df = pd.DataFrame({
'A': (1, 2, np.nan, 4),
'B': (5, np.nan, 7, 8),
'C': (9, 10, 11, 12)
})
برای رها کردن ستون هایی با مقادیر NaN، می توانیم از:
df = df.dropna(axis=1)
print(df)
خروجی:
C
0 9
1 10
2 11
3 12
همانطور که می بینید، این ستون ها را حذف می کند A
و B
از آنجایی که هر دو حداقل یک مقدار NaN داشتند.
جایگزینی مقادیر NaN به جای کاهش
گاهی اوقات، حذف مقادیر NaN ممکن است بهترین راه حل نباشد، به خصوص زمانی که نمی خواهید داده ها را از دست بدهید. در چنین مواردی، می توانید مقادیر NaN را با یک مقدار خاص با استفاده از. جایگزین کنید fillna()
تابع.
به عنوان مثال، بیایید مقادیر NaN را در DataFrame خود با 0 جایگزین کنیم:
df = pd.DataFrame({
'A': (1, 2, np.nan, 4),
'B': (5, np.nan, 7, 8),
'C': (9, 10, 11, 12)
})
df = df.fillna(0)
print(df)
خروجی:
A B C
0 1.0 5.0 9
1 2.0 0.0 10
2 0.0 7.0 11
3 4.0 8.0 12
توجه داشته باشید: این fillna()
تابع همچنین آرگومان متدی را می پذیرد که می تواند روی ‘ffill’ یا ‘bfill’ تنظیم شود تا مقادیر NaN را در DataFrame به جلو یا به عقب پر کند.
برای مجموعه دادههای خاص، جایگزینی مقدار با چیزی شبیه 0 ارزشمندتر از حذف کل ردیف است، اما همه چیز بستگی دارد روی مورد استفاده شما
نتیجه
هنگام کار با داده ها در پایتون، برخورد با مقادیر NaN یک کار رایج است. در این بایت، روش شناسایی و رها کردن سطرها یا ستونهایی با مقادیر NaN در یک DataFrame را با استفاده از dropna()
تابع. ما همچنین روش جایگزینی مقادیر NaN را با یک مقدار خاص با استفاده از آن دیدیم fillna()
تابع. به یاد داشته باشید، انتخاب بین حذف و جایگزینی مقادیر NaN بستگی دارد روی الزامات خاص کار تجزیه و تحلیل داده شما.
(برچسبها به ترجمه)# python
منتشر شده در 1402-12-29 06:14:04