Comportamiento confuso al verificar valores en una serie de pandas que contiene tanto cadenas como números enteros [duplicado]
Tengo una serie de pandas dtype: object
que contiene números y caracteres. Cuando quise verificar si existe un cierto valor en esa serie, me confundí por la forma en que se verifica la existencia de un cierto valor.
Para el siguiente ejemplo, intuitivamente esperaría que 'a'
esté en la serie y también '1'
. Además, no esperaría que el valor (entero) 1
exista en la serie, porque AFAIK the dtype: object
in pandas puede ser (¿aproximadamente?) Comparado con el tipo de cadena de python.
¿Alguien tiene una explicación para este comportamiento?
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')
Producción:
a is not in s
string 1 is not in s
integer 1 is in s
Respuestas
Cuando realiza una consulta 1 in s
, en realidad está preguntando si está en formato s.index
. Tenga en cuenta que 0 in s
también será Verdadero.
Si define s de la siguiente manera: s = pd.Series(['a',1,2], index=['a', 'b', 'c'])
Luego -
1 in s #False
'a' in s #True
Y no tiene nada que ver con los valores en sí.