วิธีแก้ไข: valueerror: ไม่สามารถปกปิดด้วยอาร์เรย์ที่ไม่ใช่บูลีนที่มีค่า na/nan


ข้อผิดพลาดที่คุณอาจพบเมื่อใช้นุ่นคือ:

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

ข้อผิดพลาดนี้มักเกิดขึ้นเมื่อคุณพยายามค้นหาแถวใน DataFrame ของ pandas ที่มีสตริงเฉพาะ แต่คอลัมน์ที่คุณกำลังค้นหามีค่า 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” ในคอลัมน์ ตำแหน่ง โดยไม่มีข้อผิดพลาด

แหล่งข้อมูลเพิ่มเติม

บทช่วยสอนต่อไปนี้จะอธิบายวิธีแก้ไขข้อผิดพลาดทั่วไปอื่นๆ ใน Python:

วิธีแก้ไข KeyError ใน Pandas
วิธีแก้ไข: ValueError: ไม่สามารถแปลง float NaN เป็น int
วิธีแก้ไข: ValueError: ตัวถูกดำเนินการไม่สามารถออกอากาศด้วยรูปร่างได้

เพิ่มความคิดเห็น

อีเมลของคุณจะไม่แสดงให้คนอื่นเห็น ช่องข้อมูลจำเป็นถูกทำเครื่องหมาย *