چگونه NaN ها را در یک Pandas DataFrame با هوش داده PlatoBlockchain پر کنیم. جستجوی عمودی Ai.

چگونه NaN ها را در یک DataFrame پاندا پر کنیم

مقادیر از دست رفته رایج هستند و یا به دلیل خطای انسانی، خطای ابزار، پردازش از یک تیم دیگر یا در غیر این صورت فقط کمبود داده برای یک مشاهده خاص رخ می دهند.

در این بایت، نگاهی به نحوه پر کردن NaNs در a خواهیم داشت DataFrame، اگر می خواهید NaN ها را با پر کردن آنها مدیریت کنید.

اول از همه، بیایید یک ماکت بسازیم DataFrame با برخی از مقادیر تصادفی حذف شده است:

import numpy as np
array = np.random.randn(25, 3)
mask = np.random.choice([1, 0], array.shape, p=[.3, .7]).astype(bool)
array[mask] = np.nan

df = pd.DataFrame(array, columns=['Col1', 'Col2', 'Col3'])
        Col1      Col2      Col3 
0  -0.671603 -0.792415  0.783922
1   0.207720       NaN  0.996131
2  -0.892115 -1.282333       NaN
3  -0.315598 -2.371529 -1.959646
4        NaN       NaN -0.584636
5   0.314736 -0.692732 -0.303951
6   0.355121       NaN       NaN
7        NaN -1.900148  1.230828
8  -1.795468  0.490953       NaN
9  -0.678491 -0.087815       NaN
10  0.755714  0.550589 -0.702019
11  0.951908 -0.529933  0.344544
12       NaN  0.075340 -0.187669
13       NaN  0.314342 -0.936066
14       NaN  1.293355  0.098964

بیایید، مثلاً، ستون سوم را رسم کنیم:

plt.plot(df['Col3'])

هنگامی که با تکنیک های مختلف پر می شود - این نمودار پر از NaN را می توان با:

چگونه NaN ها را در یک Pandas DataFrame با هوش داده PlatoBlockchain پر کنیم. جستجوی عمودی Ai.

fillna() – میانگین، میانه، حالت

شما می توانید این مقادیر را در یک ستون جدید پر کنید و آن را به ستونی که می خواهید پر کنید اختصاص دهید یا در محل با استفاده از inplace بحث و جدل. در اینجا، برای سهولت بازرسی، مقادیر پر شده را در یک ستون جدید استخراج می کنیم:

mean = df['Col3'].fillna(df['Col3'].mean(), inplace=False)
median = df['Col3'].fillna(df['Col3'].median(), inplace=False)
mode = df['Col3'].fillna(df['Col3'].mode(), inplace=False)

میانه، میانگین و حالت ستون هستند -0.187669, -0.110873 و 0.000000 و این مقادیر به ترتیب برای هر NaN استفاده خواهد شد. این به طور موثر با مقادیر ثابت پر می شود، جایی که مقدار ورودی به کل ستون بستگی دارد.

اول، پر کردن مقادیر میانه منجر به موارد زیر می شود:

چگونه NaN ها را در یک Pandas DataFrame با هوش داده PlatoBlockchain پر کنیم. جستجوی عمودی Ai.

با مقادیر میانگین:

چگونه NaN ها را در یک Pandas DataFrame با هوش داده PlatoBlockchain پر کنیم. جستجوی عمودی Ai.

با مقادیر حالت:

چگونه NaN ها را در یک Pandas DataFrame با هوش داده PlatoBlockchain پر کنیم. جستجوی عمودی Ai.

fillna() – مقدار ثابت

همچنین می توانید به جای آن یک مقدار ثابت را پر کنید:

راهنمای عملی و عملی ما برای یادگیری Git را با بهترین روش ها، استانداردهای پذیرفته شده در صنعت و برگه تقلب شامل بررسی کنید. دستورات Google Git را متوقف کنید و در واقع یاد گرفتن آی تی!

constant = df['Col3'].fillna(0, inplace=False

این باعث می شود که یک مقدار ثابت (0) به جای هر NaN قرار داده شود. 0 نزدیک به میانه و میانگین ما و برابر با حالت است، بنابراین مقادیر پر شده برای مجموعه داده ساختگی ما بسیار شبیه به آن روش خواهند بود:

0     0.783922
1     0.996131
2     0.000000
3    -1.959646
4    -0.584636
5    -0.303951
6     0.000000
7     1.230828
8     0.000000
9     0.000000
10   -0.702019
11    0.344544
12   -0.187669
13   -0.936066
14    0.098964

چگونه NaN ها را در یک Pandas DataFrame با هوش داده PlatoBlockchain پر کنیم. جستجوی عمودی Ai.

fillna() – Forward و Backward Fill

در هر ردیف - می توانید یک پر کردن به جلو یا عقب انجام دهید و مقدار را از ردیف قبل یا بعد بگیرید:

ffill = df['Col3'].fillna(method='ffill')
bfill = df['Col3'].fillna(method='bfill')

با پر کردن رو به جلو، از آنجایی که ما از ردیف 2 غایب هستیم - مقدار ردیف 1 برای پر کردن ردیف دوم گرفته می شود. مقادیر به جلو منتشر می شوند:

0     0.783922
1     0.996131
2     0.996131
3    -1.959646
4    -0.584636
5    -0.303951
6    -0.303951
7     1.230828
8     1.230828
9     1.230828
10   -0.702019
11    0.344544
12   -0.187669
13   -0.936066
14    0.098964

چگونه NaN ها را در یک Pandas DataFrame با هوش داده PlatoBlockchain پر کنیم. جستجوی عمودی Ai.

با پر کردن به عقب، برعکس اتفاق می افتد. ردیف 2 با مقدار ردیف 3 پر می شود:

0     0.783922
1     0.996131
2    -1.959646
3    -1.959646
4    -0.584636
5    -0.303951
6     1.230828
7     1.230828
8    -0.702019
9    -0.702019
10   -0.702019
11    0.344544
12   -0.187669
13   -0.936066
14    0.098964

چگونه NaN ها را در یک Pandas DataFrame با هوش داده PlatoBlockchain پر کنیم. جستجوی عمودی Ai.

اگرچه، اگر بیش از یک وجود داشته باشد NaN در یک توالی – اینها به خوبی کار نمی کنند و می توانند NaN ها را به سمت پایین تر آبشار کنند، داده ها را منحرف کرده و مقادیر واقعی ثبت شده را حذف می کنند.

interpolate()

La interpolate() روش درونیابی مقادیر را به SciPy واگذار می کند مجموعه ای از روش ها برای درونیابی مقادیر. استدلال های متنوعی را می پذیرد، از جمله: nearest, zero, slinear, quadratic, cubic, spline, barycentric, polynomial, krogh, piecewise_polynomial, spline, pchip, akima, cubicspline، و غیره

درون یابی بسیار انعطاف پذیرتر و «هوشمندانه» تر از پر کردن مقادیر با ثابت یا نیم متغیر مانند روش های قبلی است.

درون یابی می تواند به درستی یک دنباله را به گونه ای پر کند که هیچ روش دیگری قادر به پر کردن آن نیست، مانند:

s = pd.Series([0, 1, np.nan, np.nan, np.nan, 5])
s.fillna(s.mean()).values

s.fillna(method='ffill').values

s.interpolate().values

درون یابی پیش فرض خطی است و با این فرض 1...5 به احتمال زیاد a 1, 2, 3, 4, 5 توالی دور از ذهن نیست (اما تضمین شده نیست). در اینجا هم پر کردن دائمی و هم پر کردن رو به جلو یا عقب به طرز بدی شکست می خورند. به طور کلی - درون یابی معمولاً دوست خوبی برای پر کردن NaN ها در سیگنال های پر سر و صدا یا مجموعه داده های خراب است.

آزمایش با انواع درون یابی ممکن است نتایج بهتری به همراه داشته باشد.

در اینجا دو روش درون یابی (splice و polynomial نیاز به order بحث و جدل):

nearest = df['Col3'].interpolate(method='nearest')
polynomial = df['Col3'].interpolate(method='polynomial', order=3)

اینها منجر به:

چگونه NaN ها را در یک Pandas DataFrame با هوش داده PlatoBlockchain پر کنیم. جستجوی عمودی Ai.

و:

چگونه NaN ها را در یک Pandas DataFrame با هوش داده PlatoBlockchain پر کنیم. جستجوی عمودی Ai.

تمبر زمان:

بیشتر از Stackabuse