Các câu lệnh orvà andpython yêu cầu giá truthtrị. Đối với pandasnhững điều này được coi là mơ hồ, do đó bạn nên sử dụng các hoạt động "bitwise" |(hoặc) hoặc &(và):
result = result[(result['var']>0.25) | (result['var']<-0.25)]
Chúng bị quá tải cho các loại dữ liệu này để mang lại yếu tố khôn ngoan or(hoặc and).
Chỉ cần thêm một số giải thích cho tuyên bố này:
Trường hợp ngoại lệ được ném khi bạn muốn để có được boolmột 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().
Những gì bạn đạt được một nơi mà các nhà điều hành ngầm chuyển đổi các toán hạng để bool(bạn sử dụng ornhưng nó cũng xảy ra cho and, ifvà 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().
Bên cạnh những 4 báo cáo có một số chức năng python mà ẩn một số boolcuộc gọi (như any, all, filter, ...) đây là những thường không có vấn đề với pandas.Seriesnhưng cho đầy đủ tôi muốn đề cập đến những.
Trong trường hợp của bạn, ngoại lệ không thực sự hữu ích, vì nó không đề cập đến các lựa chọn thay thế phù hợp . Cho andvà orbạn có thể sử dụng (nếu bạn muốn so sánh phần tử khôn ngoan):
numpy.logical_or:
>>> import numpy as np
>>> np.logical_or(x, y)
hoặc đơn giản là |toán tử:
>>> x | y
 
numpy.logical_and:
>>> np.logical_and(x, y)
hoặc đơn giản là &toán tử:
>>> x & y
 
Nếu bạn đang sử dụng các toán tử thì hãy chắc chắn rằng bạn đặt dấu ngoặc đơn chính xác vì ưu tiên toán tử .
Có một số chức năng NumPy logic mà nên làm việc trên pandas.Series.
Các lựa chọn thay thế được đề cập trong Ngoại lệ sẽ phù hợp hơn nếu bạn gặp phải nó khi thực hiện ifhoặc while. Tôi sẽ giải thích ngắn gọn về từng điều sau:
Nếu bạn muốn kiểm tra xem Series của bạn có trống không :
>>> x = pd.Series([])
>>> x.empty
True
>>> x = pd.Series([1])
>>> x.empty
False
Python thường diễn giải lenthứ g container (như list, tuple, ...) như là chân lý có giá trị nếu nó không có sự giải thích rõ ràng boolean. Vì vậy, nếu bạn muốn kiểm tra giống như con trăn, bạn có thể làm: if x.sizehoặc if not x.emptythay vì if x.
 
Nếu bạn Serieschứa một và chỉ một giá trị boolean:
>>> x = pd.Series([100])
>>> (x > 50).bool()
True
>>> (x < 50).bool()
False
 
Nếu bạn muốn kiểm tra mục đầu tiên và duy nhất của Sê-ri của mình (thích .bool()nhưng hoạt động ngay cả đối với nội dung không phải là boolean):
>>> x = pd.Series([100])
>>> x.item()
100
 
Nếu bạn muốn kiểm tra xem tất cả hoặc bất kỳ mục nào không phải là không, không trống hoặc không-Sai:
>>> 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
 
               
              
|thay vìor