Perilaku membingungkan saat memeriksa nilai dalam seri pandas yang berisi string dan bilangan bulat [duplikat]
Saya memiliki seri panda dtype: object
yang berisi angka dan karakter. Ketika saya ingin memeriksa apakah ada nilai tertentu dalam rangkaian itu, saya bingung dengan cara memeriksa keberadaan nilai tertentu.
Untuk contoh di bawah ini, saya secara intuitif mengharapkan, yang 'a'
ada di seri dan juga '1'
. Selain itu, saya tidak akan berharap bahwa nilai (bilangan bulat) 1
ada dalam seri, karena AFAIK dtype: object
pandas dapat (kira-kira?) Dibandingkan dengan jenis string python.
Adakah yang punya penjelasan untuk perilaku ini?
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')
Keluaran:
a is not in s
string 1 is not in s
integer 1 is in s
Jawaban
Saat Anda membuat kueri, 1 in s
Anda sebenarnya menanyakan apakah ada di s.index
. Perhatikan bahwa 0 in s
itu juga akan Benar.
Jika Anda mendefinisikan s dengan cara berikut - s = pd.Series(['a',1,2], index=['a', 'b', 'c'])
Kemudian -
1 in s #False
'a' in s #True
Dan itu tidak ada hubungannya dengan nilai-nilai itu sendiri.