orและandงูหลามงบต้องtruth-values สำหรับpandasสิ่งเหล่านี้ถือว่าไม่ชัดเจนดังนั้นคุณควรใช้การดำเนินการ "bitwise" |(หรือ) หรือ&(และ):
result = result[(result['var']>0.25) | (result['var']<-0.25)]
สิ่งเหล่านี้มากเกินไปสำหรับโครงสร้างข้อมูลประเภทนี้เพื่อให้เกิดองค์ประกอบที่ชาญฉลาดor(หรือand)
เพียงเพิ่มคำอธิบายเพิ่มเติมในข้อความนี้:
ข้อยกเว้นจะถูกโยนทิ้งเมื่อคุณต้องการได้รับboola pandas.Series:
>>> import pandas as pd
>>> x = pd.Series([1])
>>> bool(x)
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
สิ่งที่คุณตีเป็นสถานที่ที่ผู้ประกอบการโดยปริยายแปลงตัวถูกดำเนินการไปbool(คุณใช้orแต่ก็ยังเกิดขึ้นand, ifและwhile):
>>> x or x
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
>>> x and x
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
>>> if x:
... print('fun')
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
>>> while x:
... print('fun')
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
นอกจากนี้งบ 4 มีฟังก์ชั่นหลามหลายอย่างที่ซ่อนบางboolสาย (เช่นany, all, filter, ... ) เหล่านี้โดยปกติไม่ได้มีปัญหากับpandas.Seriesแต่เพื่อความสมบูรณ์ที่ผมอยากจะพูดถึงเหล่านี้
ในกรณีของคุณยกเว้นไม่เป็นประโยชน์จริงๆเพราะมันไม่ได้พูดถึงทางเลือกที่เหมาะสม สำหรับandและorคุณสามารถใช้ (ถ้าคุณต้องการเปรียบเทียบองค์ประกอบที่ชาญฉลาด):
หากคุณกำลังใช้ประกอบการแล้วให้แน่ใจว่าคุณตั้งวงเล็บของคุณได้อย่างถูกต้องเพราะมีความสำคัญผู้ประกอบการ
มีหลายฟังก์ชั่น numpy ตรรกะซึ่งควรจะpandas.Seriesทำงานใน
ทางเลือกที่กล่าวถึงในข้อยกเว้นมีความเหมาะสมมากขึ้นถ้าคุณพบมันเมื่อทำหรือif whileฉันจะอธิบายสิ่งเหล่านี้ในไม่ช้า:
หากคุณต้องการตรวจสอบว่าซีรี่ส์ของคุณว่างเปล่าหรือไม่ :
>>> x = pd.Series([])
>>> x.empty
True
>>> x = pd.Series([1])
>>> x.empty
False
งูหลามปกติตีความlenGTH ของภาชนะบรรจุ (เช่นlist, tuple, ... ) เป็นค่าความจริงถ้ามันไม่เคยมีใครตีความบูลอย่างชัดเจน ดังนั้นหากคุณต้องการหลามเหมือนการตรวจสอบคุณสามารถทำ: if x.sizeหรือแทนif not x.emptyif x
หากคุณSeriesมีค่าบูลีนหนึ่งค่าเท่านั้น :
>>> x = pd.Series([100])
>>> (x > 50).bool()
True
>>> (x < 50).bool()
False
หากคุณต้องการตรวจสอบรายการแรกและรายเดียวในซีรี่ส์ของคุณ (เช่น.bool()แต่ใช้ได้แม้กับเนื้อหาที่ไม่บูลีน):
>>> x = pd.Series([100])
>>> x.item()
100
หากคุณต้องการตรวจสอบว่ารายการทั้งหมดหรือรายการใดไม่ใช่ศูนย์ไม่ว่างเปล่าหรือไม่ผิด:
>>> x = pd.Series([0, 1, 2])
>>> x.all() # because one element is zero
False
>>> x.any() # because one (or more) elements are non-zero
True
|แทนor