Comportamento confuso durante il controllo dei valori in una serie di panda che contiene sia stringhe che numeri interi [duplicato]
Ho una serie di panda dtype: object
che 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) 1
esista nella serie, perché AFAIK il dtype: object
in 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
Quando esegui 1 in s
una query in realtà stai chiedendo se è in formato s.index
. Nota che 0 in s
sarà 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.