วิธีแก้ไข: 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: ตัวถูกดำเนินการไม่สามารถออกอากาศด้วยรูปร่างได้