כיצד למלא NaNs ב-Pandas DataFrame PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

כיצד למלא NaNs ב-Pandas DataFrame

ערכים חסרים הם שכיחים ומתרחשים עקב טעות אנוש, טעות במכשיר, עיבוד מצוות אחר או סתם מחסור בנתונים לתצפית מסוימת.

ב-Byte זה, נסקור כיצד למלא NaNs ב-a DataFrame, אם תבחר לטפל ב-NaNs על ידי מילוים.

ראשית, בוא ניצור דומה 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 ב:

כיצד למלא NaNs ב-Pandas DataFrame PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

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 בהתאמה. זה למעשה מילוי בערכים קבועים, כאשר הערך הנקלט תלוי ברשומה של העמודה.

ראשית, מילוי בערכים חציוניים מביא ל:

כיצד למלא NaNs ב-Pandas DataFrame PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

עם ערכים ממוצעים:

כיצד למלא NaNs ב-Pandas DataFrame PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

עם ערכי מצב:

כיצד למלא NaNs ב-Pandas DataFrame PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

fillna() - ערך קבוע

אתה יכול גם למלא בערך קבוע במקום:

עיין במדריך המעשי והמעשי שלנו ללימוד Git, עם שיטות עבודה מומלצות, סטנדרטים מקובלים בתעשייה ודף רמאות כלול. תפסיק לגוגל פקודות 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

כיצד למלא NaNs ב-Pandas DataFrame PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

fillna() – מילוי קדימה ואחורה

בכל שורה - אתה יכול לבצע מילוי קדימה או אחורה, לקחת את הערך מהשורה שלפני או אחרי:

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

כיצד למלא NaNs ב-Pandas DataFrame PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

עם מילוי לאחור, ההפך קורה. שורה 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

כיצד למלא NaNs ב-Pandas DataFrame PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

אם כי, אם יש יותר מאחד NaN ברצף - אלה לא יצליחו ויכולים להפיל NaNs בהמשך, להטות את הנתונים ולהסיר ערכים שנרשמו בפועל.

interpolate()

השמיים interpolate() השיטה מאצילה את האינטרפולציה של ערכים ל-SciPy's חבילת שיטות לאינטרפולציה של ערכים. הוא מקבל מגוון רחב של טיעונים, כולל, 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 סביר להניח א 1, 2, 3, 4, 5 הרצף אינו מופרך (אך אינו מובטח). גם מילוי מתמיד וגם מילוי קדימה או אחורה נכשלים כאן מאוד. באופן כללי - אינטרפולציה בדרך כלל תהיה חברה טובה כשזה מגיע למילוי NaNs באותות רועשים, או מערכי נתונים מושחתים.

ניסוי עם סוגי אינטרפולציה עשוי להניב תוצאות טובות יותר.

להלן שתי שיטות אינטרפולציה (splice ו polynomial דורשים order טַעֲנָה):

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

אלה מביאים ל:

כיצד למלא NaNs ב-Pandas DataFrame PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

ו:

כיצד למלא NaNs ב-Pandas DataFrame PlatoBlockchain Data Intelligence. חיפוש אנכי. איי.

בול זמן:

עוד מ Stackabuse