كيفية الإصلاح: خطأ القيمة: غير قادر على الإخفاء بمصفوفة غير منطقية تحتوي على قيم na/nan


الخطأ الذي قد تواجهه عند استخدام الباندا هو:

 ValueError : Cannot mask with non-boolean array containing NA / NaN values

يحدث هذا الخطأ عادةً عندما تحاول العثور على صفوف في pandas DataFrame تحتوي على سلسلة معينة، ولكن العمود الذي تبحث عنه يحتوي على قيم NaN.

يوضح المثال التالي كيفية تصحيح هذا الخطأ عمليًا.

كيفية إعادة إنتاج الخطأ

لنفترض أن لدينا DataFrame الباندا التالية:

 import pandas as pd
import numpy as np

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'B', 'B'],
                   ' position ': ['Guard', 'Guard', np. nan , 'Guard', 'Forward'],
                   ' points ': [22, 28, 14, 13, 19]})

#view DataFrame
print (df)

  team position points
0 A Guard 22
1 A Guard 28
2 A NaN 14
3 B Guard 13
4 B Forward 19

لنفترض الآن أننا نحاول الوصول إلى جميع الصفوف في DataFrame حيث يحتوي عمود الموضع على السلسلة “Guard”:

 #access all rows where position column contains 'Guard'
df[df[' position ']. str . contains (' Guard ')]

ValueError : Cannot mask with non-boolean array containing NA / NaN values

نتلقى خطأ بسبب وجود قيمة NaN في عمود الموضع .

كيفية اصلاح الخطأ

لتجنب هذا الخطأ، ما عليك سوى استخدام الوسيطة na=False في الدالة str.contains() :

 #access all rows where position column contains 'Guard', ignore NaN
df[df[' position ']. str . contains (' Guard ', na= False )]

        team position points
0 A Guard 22
1 A Guard 28
3 B Guard 13

هذه المرة يمكننا الوصول إلى جميع الصفوف التي تحتوي على “Guard” في عمود الموضع دون أي أخطاء.

هناك طريقة أخرى لتجنب هذا الخطأ وهي استخدام .fillna(False) كما يلي:

 #access all rows where position column contains 'Guard', ignore NaN
df[df[' position ']. str . contains (' Guard '). fillna ( False )]

        team position points
0 A Guard 22
1 A Guard 28
3 B Guard 13

مرة أخرى يمكننا الوصول إلى جميع الصفوف التي تحتوي على “Guard” في عمود الموضع دون أي أخطاء.

مصادر إضافية

تشرح البرامج التعليمية التالية كيفية إصلاح الأخطاء الشائعة الأخرى في بايثون:

كيفية إصلاح KeyError في الباندا
كيفية الإصلاح: خطأ القيمة: غير قادر على تحويل float NaN إلى int
كيفية الإصلاح: خطأ في القيمة: لا يمكن بث المعاملات بالأشكال

Add a Comment

ایمئیل یایینلانمایاجاق ایسته‎نیله‎ن بوشلوقلار خاللانمیشدیر *