Hành vi khó hiểu khi kiểm tra các giá trị trong chuỗi gấu trúc chứa cả chuỗi và số nguyên [trùng lặp]
Tôi có một loạt gấu trúc dtype: object
chứa cả số và ký tự. Khi tôi muốn kiểm tra xem một giá trị nhất định có tồn tại trong chuỗi đó hay không, tôi đã bối rối với cách kiểm tra sự tồn tại của một giá trị nhất định.
Đối với ví dụ dưới đây, tôi sẽ mong đợi một cách trực quan, đó 'a'
là trong loạt bài và cả '1'
. Hơn nữa, tôi sẽ không mong đợi rằng giá trị (số nguyên) 1
tồn tại trong chuỗi, bởi vì AFAIK dtype: object
trong gấu trúc có thể được so sánh (đại khái?) Với kiểu chuỗi của python.
Có ai có một lời giải thích cho hành vi này?
s = pd.Series(['a',1,2])
if 'a' in s:
print('a is in s')
else:
print('a is not in s')
if '1' in s:
print('string 1 is in s')
else:
print('string 1 is not in s')
if 1 in s:
print('integer 1 is in s')
else:
print('integer 1 is not in s')
Đầu ra:
a is not in s
string 1 is not in s
integer 1 is in s
Trả lời
Khi bạn đang truy vấn, 1 in s
bạn thực sự đang hỏi xem nó có ở trong không s.index
. Lưu ý rằng 0 in s
cũng sẽ là True.
Nếu bạn định nghĩa s theo cách sau: s = pd.Series(['a',1,2], index=['a', 'b', 'c'])
Sau đó -
1 in s #False
'a' in s #True
Và nó không liên quan gì đến bản thân các giá trị.