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]

Jan 05 2021

Tôi có một loạt gấu trúc dtype: objectchứ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) 1tồn tại trong chuỗi, bởi vì AFAIK dtype: objecttrong 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

4 TomRon Jan 05 2021 at 19:01

Khi bạn đang truy vấn, 1 in sbạn thực sự đang hỏi xem nó có ở trong không s.index. Lưu ý rằng 0 in scũ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ị.