Mylące zachowanie podczas sprawdzania wartości w serii pand, która zawiera zarówno ciągi, jak i liczby całkowite [zduplikowane]

Jan 05 2021

Mam serię pand, dtype: objectktóra zawiera zarówno cyfry, jak i znaki. Kiedy chciałem sprawdzić, czy w tej serii istnieje pewna wartość, pomylił mnie sposób, w jaki sprawdzane jest istnienie określonej wartości.

Na poniższy przykład intuicyjnie spodziewałbym się, że 'a'jest w serii, a także '1'. Co więcej, nie spodziewałbym się, że (liczba całkowita) 1istnieje w serii, ponieważ AFAIK dtype: objectin pandas można (z grubsza?) Porównać z typem ciągu Pythona.

Czy ktoś ma wyjaśnienie tego zachowania?

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

Wynik:

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

Odpowiedzi

4 TomRon Jan 05 2021 at 19:01

Kiedy 1 in spytasz, tak naprawdę pytasz, czy jest w środku s.index. Zauważ, że 0 in sbędzie to również prawda.

Jeśli zdefiniujesz s w następujący sposób - s = pd.Series(['a',1,2], index=['a', 'b', 'c'])

Następnie -

1 in s #False

'a' in s #True

I nie ma to nic wspólnego z samymi wartościami.