Verwirrendes Verhalten bei der Suche nach Werten in einer Pandas-Reihe, die sowohl Zeichenfolgen als auch Ganzzahlen enthält [Duplikat]

Jan 05 2021

Ich habe eine Pandas-Serie dtype: object, die sowohl Zahlen als auch Zeichen enthält. Als ich überprüfen wollte, ob ein bestimmter Wert in dieser Reihe vorhanden ist, war ich verwirrt darüber, wie die Existenz eines bestimmten Werts überprüft wird.

Für das folgende Beispiel würde ich intuitiv erwarten, das 'a'ist in der Serie und auch '1'. Außerdem würde ich nicht erwarten, dass der (ganzzahlige) Wert 1in der Reihe vorhanden ist, da AFAIK die dtype: objectin pandas (ungefähr?) Mit dem String-Typ von Python verglichen werden kann.

Hat jemand eine Erklärung für dieses Verhalten?

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

Ausgabe:

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

Antworten

4 TomRon Jan 05 2021 at 19:01

Wenn Sie abfragen 1 in s, fragen Sie tatsächlich, ob es in ist s.index. Beachten Sie, dass dies 0 in sauch True ist.

Wenn Sie s folgendermaßen definieren: s = pd.Series(['a',1,2], index=['a', 'b', 'c'])

Dann -

1 in s #False

'a' in s #True

Und es hat nichts mit den Werten selbst zu tun.