我已经使用Pandas超过3个月了,我对数据帧访问和查询等方面有一个很好的想法。
我有一个要求,其中我想使用LIKE关键字(类似于SQL的LIKE)查询数据帧 pandas.query()。
即: 我试图执行 pandas.query(“column_name LIKE'abc%'”) 命令,但它失败了。
我知道另一种方法是使用str.contains(“abc%”),但这不符合我们的要求。
我们想在pandas.query()中执行LIKE。我怎么能这样做?
我已经使用Pandas超过3个月了,我对数据帧访问和查询等方面有一个很好的想法。
我有一个要求,其中我想使用LIKE关键字(类似于SQL的LIKE)查询数据帧 pandas.query()。
即: 我试图执行 pandas.query(“column_name LIKE'abc%'”) 命令,但它失败了。
我知道另一种方法是使用str.contains(“abc%”),但这不符合我们的要求。
我们想在pandas.query()中执行LIKE。我怎么能这样做?
这个帖子超级晚了,但对于遇到它的人来说。您可以通过基于字符串方法检查制作搜索条件来使用布尔索引 str.contains
。
例:
dataframe[dataframe.summary.str.contains('Windows Failed Login', case=False)]
在上面的代码中,括号内的代码段引用了数据框的摘要列并使用了 .str.contains
搜索方法 'Windows Failed Login'
在该系列的每个价值范围内。区分大小写可以设置为true或false。这将返回布尔索引,然后用于返回您要查找的数据帧。您可以使用 .fillna()
如果遇到任何Nan错误,也可以在括号中使用它。
希望这可以帮助!
如果必须使用df.query(),则正确的语法是:
pandas.query('column_name.str.contains("abc")')
您可以轻松地将其与其他条件相结合:
pandas.query('column_a.str.contains("abc") or column_b.str.contains("xyz") and column_c>100')
然而,它不是SQL Like的完全等价物,但仍然有用。
不使用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
Query使用pandas 的eval() 并限制在其中可以使用的内容。如果你想使用纯SQL,你可以考虑 pandasql 以下陈述适合您:
sqldf("select col_name from df where col_name like 'abc%';", locals())
或者如果你的问题与熊猫交替 str
方法是您的列不完全是字符串类型,您可以执行以下操作:
df[df.col_name.str.startswith('abc').fillna(False)]
@volodymyr是对的,但他忘记的是你需要将engine ='python'设置为表达式才能工作。
例:
>>> pd_df.query('column_name.str.contains("abc")', engine='python')
这里 有关默认引擎('numexpr')和'python'引擎的更多信息。另外,请记住,'python'在大数据上速度较慢。