วิธีแก้ไข: ไม่สามารถเปรียบเทียบอาร์เรย์ที่พิมพ์ [float64] กับประเภทสเกลาร์ [bool]


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

 TypeError : cannot compare a dtyped [object] array with a scalar of type [bool]

ข้อผิดพลาดนี้มักเกิดขึ้นเมื่อคุณพยายามสับเซ็ต DataFrame ตามเงื่อนไขหลายข้อ และไม่สามารถใส่วงเล็บรอบแต่ละเงื่อนไขได้

ตัวอย่างต่อไปนี้แสดงวิธีการแก้ไขข้อผิดพลาดนี้ในทางปฏิบัติ

วิธีการทำซ้ำข้อผิดพลาด

สมมติว่าเราสร้าง DataFrame แพนด้าต่อไปนี้:

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' position ': ['G', 'G', 'F', 'C', 'G', 'F', 'F', 'C'],
                   ' points ': [21, 30, 26, 29, 14, 29, 22, 16]})

#view DataFrame
print (df)

  team position points
0 AG 21
1 AG 30
2 AF26
3AC 29
4 BG 14
5 BF 29
6 BF 22
7 BC 16

ตอนนี้ สมมติว่าเราพยายามใช้ฟังก์ชัน .loc เพื่อแสดงเฉพาะแถวที่ทีมเท่ากับ “A” และตำแหน่งเท่ากับ “G”:

 #attempt to only show rows where team='A' and position='G'
df. loc [df. team == ' A ' & df. position == ' G ']

TypeError : cannot compare a dtyped [object] array with a scalar of type [bool]

เราได้รับ ValueError เนื่องจากเราไม่ได้ใส่วงเล็บล้อมรอบเงื่อนไขแต่ละรายการ

เนื่องจากตัวดำเนินการ & มีความสำคัญเหนือกว่าตัวดำเนินการ == ดังนั้นแพนด้าจึงไม่สามารถตีความคำสั่งนี้ในลำดับที่ถูกต้องได้

วิธีการแก้ไขข้อผิดพลาด

วิธีที่ง่ายที่สุดในการแก้ไขข้อผิดพลาดนี้คือเพียงเพิ่มวงเล็บรอบๆ เงื่อนไขแต่ละรายการดังนี้:

 #only show rows where team='A' and position='G'
df. loc [(df. team == ' A ') & (df. position == ' G ')]

	team position points
0 A G 21
1 A G 30

โปรดทราบว่าเราไม่ได้รับ ValueError และเราจัดการย่อย DataFrame ได้สำเร็จ

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

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

วิธีแก้ไข: คอลัมน์ซ้อนทับกันแต่ไม่ได้ระบุส่วนต่อท้าย
วิธีแก้ไข: คุณกำลังพยายามผสานวัตถุและคอลัมน์ int64
วิธีแก้ไข: ไม่สามารถกำหนดแถวที่มีคอลัมน์ไม่ตรงกันได้

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

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