وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

حذف مقادیر NaN در Pandas DataFrame

0 186
زمان لازم برای مطالعه: 4 دقیقه


معرفی

هنگام کار با داده ها در پایتون، مواجهه با مقادیر از دست رفته یا تهی که اغلب به صورت 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

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید