Непонятное поведение при проверке значений в серии pandas, содержащей как строки, так и целые числа [дубликат]

Jan 05 2021

У меня есть серия панд 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

Ответы

4 TomRon Jan 05 2021 at 19:01

Когда вы запрашиваете, 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

И это не имеет ничего общего с самими ценностями.