วิธีแก้ไขใน pandas: ค่าความจริงของซีรีส์ไม่ชัดเจน


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

 ValueError : The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(),
            a.any() or a.all().

ข้อผิดพลาดนี้มักเกิดขึ้นเมื่อคุณพยายามกรอง DataFrame ของแพนด้าโดยใช้คำ และ และ หรือ แทนที่จะใช้ อักขระ & และ | ผู้ประกอบการ

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

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

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

 import pandas as pd

#createDataFrame
df = pd. DataFrame ({' team ': ['A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'],
                   ' points ': [18, 22, 19, 14, 14, 11, 20, 28],
                   ' assists ': [5, 7, 7, 9, 12, 9, 9, 4],
                   ' rebounds ': [11, 8, 10, 6, 6, 5, 9, 12]})

#view DataFrame
print (df)

  team points assists rebounds
0 A 18 5 11
1 to 22 7 8
2 A 19 7 10
3 A 14 9 6
4 B 14 12 6
5 B 11 9 5
6 B 20 9 9
7 B 28 4 12

ตอนนี้ สมมติว่าเรากำลังพยายามกรองแถวที่ทีมมีค่าเท่ากับ “A” และ คะแนนน้อยกว่า 20:

 #attempt to filter DataFrame
df[(df[' team '] == ' A ') and (df[' points '] < 20 )]

ValueError : The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(),
            a.any() or a.all().

หรือสมมติว่าเราพยายามกรองแถวที่ทีมเท่ากับ “A” หรือ จุดที่น้อยกว่า 20:

 #attempt to filter DataFrame
df[(df[' team '] == ' A ') or (df[' points '] < 20 )]

ValueError : The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(),
            a.any() or a.all().

ในทั้งสองสถานการณ์ เราได้รับข้อผิดพลาดที่บอกเราว่าค่าความจริงของซีรีส์ไม่ชัดเจน

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

เพื่อหลีกเลี่ยงข้อผิดพลาดนี้เมื่อกรอง เราจำเป็นต้องตรวจสอบให้แน่ใจว่าเราใช้ & และ | องค์ประกอบ ผู้ประกอบการ

ตัวอย่างเช่น เราสามารถใช้โค้ดต่อไปนี้เพื่อกรองแถวที่ทีมเท่ากับ “A” และ คะแนนน้อยกว่า 20:

 #filter DataFrame
df[(df[' team '] == ' A ') & (df[' points '] < 20 )]

team points assists rebounds
0 A 18 5 11
2 A 19 7 10
3 A 14 9 6

หรือเราสามารถใช้โค้ดต่อไปนี้เพื่อกรองแถวที่ทีมเท่ากับ “A” หรือ คะแนนน้อยกว่า 20:

 #filter DataFrame
df[(df[' team '] == ' A ') | (df[' points '] < 20 )]

        team points assists rebounds
0 A 18 5 11
1 to 22 7 8
2 A 19 7 10
3 A 14 9 6
4 B 14 12 6
5 B 11 9 5

ในทั้งสองสถานการณ์ เราไม่ได้รับข้อผิดพลาดเนื่องจากเราใช้ & และ | องค์ประกอบ ผู้ประกอบการ

หมายเหตุ : สิ่งสำคัญคือต้องใส่วงเล็บล้อมรอบแต่ละเงื่อนไขเมื่อกรอง Pandas DataFrame ตามเงื่อนไขหลายข้อ มิฉะนั้นคุณจะได้รับข้อผิดพลาด

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

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

วิธีแก้ไข: โมดูล “pandas” ไม่มีแอตทริบิวต์ “dataframe”
วิธีแก้ไขใน Pandas: SettingWithCopyWarning
วิธีแก้ไขใน Pandas: TypeError: ไม่มีข้อมูลตัวเลขให้ลงจุด

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

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