Pandas erfordert eine bestimmte Syntax, damit die Dinge funktionieren. Auf der Suche nach einem str
y
mit dem Operator in überprüft die Mitgliedschaft der Zeichenfolge y
in einem Pandas Series
.
>>> df = pd.DataFrame({'x': ['hiya', 'howdy', 'hello']})
>>> df
x
0 hiya
1 howdy
2 hello
>>> df_rows = np.where('y' in df['x'])[0]
>>> df_rows
array([], dtype=int64)
>>> df_rows = np.where(df['x'].str.contains('y'))[0]
>>> df_rows
array([0, 1], dtype=int64)
Versuchen Sie dies und merkt es gibt einen Bool statt drei (wie wir zuerst denken könnte, da es drei Elemente in der Serie sind):
>>> 'y' in df['x']
False
>>> 'hiya' in df['x']
False
>>> 'hiya' in df['x'].values
True
Sie immer an sich selbst denken müssen: " suche ich nach Artikeln in einer Serie oder suche ich innerhalb der Serie nach Strings? "
Für Elemente in einer Reihe, verwenden isin
:
df['x'].isin(['hello'])
Für Strings innerhalb eines Elements verwenden .str.{whatever}
(oder .apply(lambda s: s)
):
>>> df['x'].str.contains('y')
0 True
1 True
2 False
Name: x, dtype: bool
>>> df['x'].apply(lambda s: 'y' in s)
0 True
1 True
2 False
Name: x, dtype: bool
im ersten, 'df [ 'x'] 'ist eine listenartige Sequenz und Sie suchen nach Einträgen, die genau '' y'' sind. In der zweiten vektorisiert 'df [' x ']. Str' stringartige Operationen für jedes Element in 'df [' x ']' –