Mylące zachowanie podczas sprawdzania wartości w serii pand, która zawiera zarówno ciągi, jak i liczby całkowite [zduplikowane]
Mam serię pand, dtype: object
któ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) 1
istnieje w serii, ponieważ AFAIK dtype: object
in 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
Kiedy 1 in s
pytasz, tak naprawdę pytasz, czy jest w środku s.index
. Zauważ, że 0 in s
bę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.