Непонятное поведение при проверке значений в серии pandas, содержащей как строки, так и целые числа [дубликат]
У меня есть серия панд dtype: object
, содержащая как числа, так и символы. Когда я хотел проверить, существует ли определенное значение в этой серии, я запутался в том, как проверяется наличие определенного значения.
Для приведенного ниже примера я интуитивно ожидал, что он 'a'
есть в серии, а также '1'
. Кроме того, я бы не ожидал, что (целочисленное) значение 1
существует в серии, потому что AFAIK dtype: object
в pandas может быть (примерно?) По сравнению с типом строки python.
Есть ли у кого-нибудь объяснение такому поведению?
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')
Выход:
a is not in s
string 1 is not in s
integer 1 is in s
Ответы
Когда вы запрашиваете, 1 in s
вы на самом деле спрашиваете, есть ли он в s.index
. Обратите внимание, что 0 in s
это также будет True.
Если вы определите s следующим образом - s = pd.Series(['a',1,2], index=['a', 'b', 'c'])
Потом -
1 in s #False
'a' in s #True
И это не имеет ничего общего с самими ценностями.