or
และand
งูหลามงบต้องtruth
-values สำหรับpandas
สิ่งเหล่านี้ถือว่าไม่ชัดเจนดังนั้นคุณควรใช้การดำเนินการ "bitwise" |
(หรือ) หรือ&
(และ):
result = result[(result['var']>0.25) | (result['var']<-0.25)]
สิ่งเหล่านี้มากเกินไปสำหรับโครงสร้างข้อมูลประเภทนี้เพื่อให้เกิดองค์ประกอบที่ชาญฉลาดor
(หรือand
)
เพียงเพิ่มคำอธิบายเพิ่มเติมในข้อความนี้:
ข้อยกเว้นจะถูกโยนทิ้งเมื่อคุณต้องการได้รับbool
a 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
งูหลามปกติตีความlen
GTH ของภาชนะบรรจุ (เช่นlist
, tuple
, ... ) เป็นค่าความจริงถ้ามันไม่เคยมีใครตีความบูลอย่างชัดเจน ดังนั้นหากคุณต้องการหลามเหมือนการตรวจสอบคุณสามารถทำ: if x.size
หรือแทนif not x.empty
if 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