2016-07-29 16 views
1

einen Datenrahmen erstellen mit unter Bedingungen mit subsettingPandas - Äquivalent str.contains() in Pandas Abfrage

subset_df = df_eq.loc[(df_eq['place'].str.contains('Chile')) & (df_eq['mag'] > 7.5),['time','latitude','longitude','mag','place']] 

Wollen Sie die obige Teilmenge mit query() in Pandas.However nicht sicher replizieren, wie str zu replizieren .contains() entspricht der Pandas-Abfrage. „Like“ in Abfrage scheint nicht

query_df = df_eq[['time','latitude','longitude','mag','place']].query('place like \'%Chile\' and mag > 7.5') 

place like '%Chile'and mag >7.5 
      ^
SyntaxError: invalid syntax 

Jede mögliche Hilfe geschätzt wird hier

zu arbeiten
+0

Ich bin hier bei Strohhalm greifen, aber Sie _might_ der Lage sein, die Python 'in' Operator zu verwenden, wenn Sie die' Motor = 'python'' gesetzt. Wenn es funktioniert, wird es wahrscheinlich mit einer ziemlich ineffizienten Abfrage enden (normalerweise 'pandas' versucht,' numexpr' zu verwenden, um die Dinge zu beschleunigen, aber 'numexpr' unterstützt den' in'-Operator nicht ...) – mgilson

+2

AFAIK, SQL 'like' Operator ist noch nicht in pandas' query() 'Methode implementiert, so dass Sie es nicht tun können mit' query() 'Methode – MaxU

+0

Danke für Ihre Kommentare.Ja wie Operator ist nicht da, so dass die Arbeit bleibt str .enthält() – raul

Antwort

3

Was ich denke, vor sich geht, ist, dass Sie nicht in der Lage sind, das Verfahren str.contains innerhalb des query Pandas Methode zu verwenden, . Was Sie können Do ist eine Maske erstellen und beziehen sich auf diese Maske aus query mit dem At-Zeichen (@). Versuchen Sie folgendes:

my_mask = df_eq["feature"].str.contains('my_word') 
df_eq.query("@my_mask")