Comportamento confuso durante il controllo dei valori in una serie di panda che contiene sia stringhe che numeri interi [duplicato]

Jan 05 2021

Ho una serie di panda dtype: objectche contiene sia numeri che caratteri. Quando volevo verificare se un certo valore esiste in quella serie, mi sono confuso il modo in cui viene verificata l'esistenza di un certo valore.

Per l'esempio qui sotto, mi aspetterei intuitivamente, che 'a'è nella serie e anche '1'. Inoltre, non mi aspetterei che il valore (intero) 1esista nella serie, perché AFAIK il dtype: objectin panda può essere (più o meno?) Confrontato con il tipo di stringa di python.

Qualcuno ha una spiegazione per questo comportamento?

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')

Produzione:

a is not in s
string 1 is not in s
integer 1 is in s

Risposte

4 TomRon Jan 05 2021 at 19:01

Quando esegui 1 in suna query in realtà stai chiedendo se è in formato s.index. Nota che 0 in ssarà anche vero.

Se definisci s nel modo seguente: s = pd.Series(['a',1,2], index=['a', 'b', 'c'])

Poi -

1 in s #False

'a' in s #True

E non ha nulla a che fare con i valori stessi.