Verwirrendes Verhalten bei der Suche nach Werten in einer Pandas-Reihe, die sowohl Zeichenfolgen als auch Ganzzahlen enthält [Duplikat]
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 1
in der Reihe vorhanden ist, da AFAIK die dtype: object
in 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
Wenn Sie abfragen 1 in s
, fragen Sie tatsächlich, ob es in ist s.index
. Beachten Sie, dass dies 0 in s
auch 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.