Pandas - 相当于 pandas 查询中的 str.contains()

rau*_*aul 8 python data-analysis pandas

使用具有以下条件的子集创建数据框

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

想在 Pandas 中使用 query() 复制上述子集。但是不确定如何在 Pandas 查询中复制 str.contains() 等效项。查询中的“喜欢”似乎不起作用

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
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激

edd*_*eek 7

在 pandas 1.0.0 中使用 str.contains 对我有用,语法如下:

df.query("columnA == 'foo' and columnB.str.contains('bar')")
Run Code Online (Sandbox Code Playgroud)

  • 检查是否安装了“numexpr”模块。如果没有,则使用默认的“python”引擎,其中“str.contains”是有效表达式。 (2认同)

小智 6

我认为这里发生的是您无法str.containsquerypandas 方法中使用该方法。您可以做的是创建一个掩码并query使用 at 符号 (@)从内部引用该掩码。尝试这个:

my_mask = df_eq["feature"].str.contains('my_word')
df_eq.query("@my_mask")
Run Code Online (Sandbox Code Playgroud)


pet*_*ens 6

到目前为止,我可以通过使用在查询中使用engine='python'.query方法的参数来做到这一点str.contains

这应该有效:

query_df = df_eq[['time', 'latitude', 'longitude', 'mag', 'place']].query(
    "place.str.contains('Chile') and mag > 7.5", engine="python")
Run Code Online (Sandbox Code Playgroud)