können Sie die Tilde ~
die Bool-Werte leicht zu schlagen:
>>> df = pd.DataFrame({"A": ["Hello", "this", "World", "apple"]})
>>> df.A.str.contains("Hello|World")
0 True
1 False
2 True
3 False
Name: A, dtype: bool
>>> ~df.A.str.contains("Hello|World")
0 False
1 True
2 False
3 True
Name: A, dtype: bool
>>> df[~df.A.str.contains("Hello|World")]
A
1 this
3 apple
[2 rows x 1 columns]
Ob dies der effizienteste Weg ist, weiß ich nicht; Sie müssten es gegen Ihre anderen Optionen abmessen. Manchmal ist das Verwenden eines regulären Ausdrucks langsamer als Dinge wie df[~(df.A.str.contains("Hello") | (df.A.str.contains("World")))]
, aber ich bin schlecht darin zu erraten, wo die Übergänge sind.
Viel besser als ein verschachtelter negativer Lookaround-Test. Keine Erfahrung mit Pandas selbst, also habe ich keine Ahnung, was der schnellere Ansatz wäre. –
Der Regex-Lookaround-Test dauerte deutlich länger (etwa 30s vs 20s), und die beiden Methoden haben anscheinend leicht unterschiedliche Ergebnisse (3663K Ergebnis vs 3504K - von ~ 3G Original - haben nicht gesehen, um Details zu sehen). – Xodarap777
@DSM Ich habe dieses '~' Symbol viele Male gesehen, speziell in JavaScript. Habe nicht in Python gesehen. Was bedeutet es genau? – estebanpdl