كيفية ملء NaNs في Pandas DataFrame PlatoBlockchain Data Intelligence. البحث العمودي. عاي.

كيفية ملء NaNs في Pandas DataFrame

القيم المفقودة شائعة وتحدث إما بسبب خطأ بشري أو خطأ في الجهاز أو معالجة من فريق آخر أو بخلاف ذلك بسبب نقص البيانات لملاحظة معينة.

في هذا البايت ، سنلقي نظرة على كيفية ملء NaNs في ملف 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 ، مع أفضل الممارسات ، والمعايير المقبولة في الصناعة ، وورقة الغش المضمنة. توقف عن أوامر Googling 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() تفوض الطريقة استيفاء القيم إلى 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 من المحتمل أن يكون 1, 2, 3, 4, 5 التسلسل ليس بعيد المنال (ولكن ليس مضمونًا). كل من الملء المستمر والتعبئة الأمامية أو الخلفية تفشل فشلاً ذريعاً هنا. بشكل عام - عادةً ما يكون الاستيفاء صديقًا جيدًا عندما يتعلق الأمر بملء NaN بإشارات صاخبة أو مجموعات بيانات فاسدة.

قد تؤدي تجربة أنواع الاستيفاء إلى نتائج أفضل.

فيما يلي طريقتان من أساليب الاستيفاء (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. البحث العمودي. عاي.

الطابع الزمني:

اكثر من ستاكابوز