【问题标题】:useing regular expression for column filter对列过滤器使用正则表达式
【发布时间】:2016-10-20 07:54:53
【问题描述】:

我有一个 pandas DataFrame 包含年份和标题。其中一些rows.nameBatmanCatman 等。我正在尝试使用以下表达式获取格式为.*man 的所有行:

t[t.title & re.search(r'.*man', t.title)]

这失败了。有没有一种惯用的方法来实现这一点?

【问题讨论】:

    标签: python pandas


    【解决方案1】:
    t[t.title & (t.title[-3:] == 'man')]
    

    【讨论】:

    • 太棒了;这会奏效;但我可能想放一个复杂的正则表达式,我想解决匹配对象是否有像 ~ 或 re_match 这样的运算符?
    • 使用函数:def select_(t): return t.title[-3:] == 'man' 然后 t[t.title & select_(t)]。当您需要更复杂的选择时,只需更改 select_
    • 表示 select_t() :必须返回 True 还是 False ?正确。
    • 我不知道你的 DF lib(我假设是熊猫)是如何工作的。我只是在您的代码中替换我的解决方案。如果需要一个布尔值,是的。
    【解决方案2】:

    使用str.contains:
    df[df['title'].str.contains('.man')]

    【讨论】:

    • 这将不起作用,因为将选择“mangggggggg”,因此不需要。
    【解决方案3】:

    以下解决方案有效

    df.ix[[x for x in df.index if re.search(r'.*e.*', x)]]

    灵感来自 || Pandas - filter and regex search the index of DataFrame

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-03-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多