Perilaku membingungkan saat memeriksa nilai dalam seri pandas yang berisi string dan bilangan bulat [duplikat]

Jan 05 2021

Saya memiliki seri panda dtype: objectyang 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) 1ada dalam seri, karena AFAIK dtype: objectpandas 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

4 TomRon Jan 05 2021 at 19:01

Saat Anda membuat kueri, 1 in sAnda sebenarnya menanyakan apakah ada di s.index. Perhatikan bahwa 0 in situ 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.