在pandas.query()中使用LIKE

Pra*_*p M 22 python dataframe pandas

我已经使用Pandas超过3个月了,我对数据帧的访问和查询等有了一个很好的想法.

我有一个要求,其中我想在pandas.query()中使用LIKE关键字(类似于SQL的LIKE)查询数据帧.

即:我试图执行pandas.query("column_name LIKE'abc%'")命令,但它失败了.

我知道另一种方法是使用str.contains("abc%"),但这不符合我们的要求.

我们想在pandas.query()中执行LIKE.我怎么能这样做?

vol*_*myr 21

如果必须使用df.query(),则正确的语法是:

pandas.query('column_name.str.contains("abc")')
Run Code Online (Sandbox Code Playgroud)

您可以轻松地将其与其他条件相结合:

pandas.query('column_a.str.contains("abc") or column_b.str.contains("xyz") and column_c>100')
Run Code Online (Sandbox Code Playgroud)

然而,它并不完全等同于SQL Like,但仍然有用.

  • 正如 @P.Panayotov 提到的,如果没有添加`,engine='python'`,Pandas 版本 0.24.2 不适用于我。此外,使用“pandas”而不是“df”可能会让初学者感到困惑。 (2认同)

小智 17

@volodymyr是对的,但他遗忘的是你需要将engine ='python'设置为表达才能工作.

例: >>> pd_df.query('column_name.str.contains("abc")', engine='python')

以下是有关默认引擎('numexpr')和'python'引擎的更多信息.另外,请记住,'python'在大数据上的速度较慢.


kha*_*mel 5

不使用query(),但这将为您提供所需的内容:

df[df.col_name.str.startswith('abc')]


df
Out[93]: 
  col_name
0     this
1     that
2     abcd

df[df.col_name.str.startswith('abc')]
Out[94]: 
  col_name
2     abcd
Run Code Online (Sandbox Code Playgroud)

查询使用熊猫eval(),并且在其中可以使用的内容受到限制。如果要使用纯SQL,可以考虑使用pandasql,以下语句将对您有效:

sqldf("select col_name from df where col_name like 'abc%';", locals())
Run Code Online (Sandbox Code Playgroud)

或者,如果您对pandas str方法的问题是您的列不完全是字符串类型,则可以执行以下操作:

df[df.col_name.str.startswith('abc').fillna(False)]
Run Code Online (Sandbox Code Playgroud)


小智 5

这个帖子的时间已经很晚了,但对于任何碰到它的人来说.您可以通过基于字符串方法检查制作搜索条件来使用布尔索引str.contains.

例:

dataframe[dataframe.summary.str.contains('Windows Failed Login', case=False)]
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,括号内的代码段引用数据框的摘要列,并使用该.str.contains方法'Windows Failed Login'在该系列的每个值中进行搜索.区分大小写可以设置为true或false.这将返回布尔索引,然后用于返回您要查找的数据帧..fillna()如果遇到任何Nan错误,也可以在括号中使用它.

希望这可以帮助!