【问题标题】:Pandas - equivalent of str.contains() in pandas queryPandas - 相当于 pandas 查询中的 str.contains()
【发布时间】:2016-07-29 15:04:50
【问题描述】:

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

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

想在 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

任何帮助将不胜感激

【问题讨论】:

  • 我在这里抓住了救命稻草,但是如果您设置engine='python',您可能能够使用python的in 运算符。如果它有效,它可能会以非常低效的查询告终(通常pandas 尝试使用numexpr 来加快速度,但numexpr 不支持in 运算符...)
  • AFAIK,pandas query() 方法中尚未实现 SQL like 运算符,因此您无法使用 query() 方法来实现
  • 感谢您的 cmets.Yeah like operator 不在那里,所以解决方法仍然是 str.contains()
  • 你好,来自智利,我想知道你为什么在这种情况下使用.iloc,下面的df_eq[(df_eq['place'].str.contains('Chile')) & (df_eq['mag'] > 7.5)][['time','latitude','longitude','mag','place']]应该足够了

标签: python pandas data-analysis


【解决方案1】:

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

这应该可行:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      df.query("columnA == 'foo' and columnB.str.contains('bar')")
      

      【讨论】:

      • 检查是否安装了“numexpr”模块。如果不是,则使用默认的“python”引擎,其中str.contains 是一个有效的表达式。
      猜你喜欢
      • 1970-01-01
      • 2018-02-17
      • 2019-04-05
      • 1970-01-01
      • 2019-09-08
      • 1970-01-01
      • 2023-02-20
      • 2018-07-13
      • 2019-01-30
      相关资源
      最近更新 更多