【问题标题】:Pandas filter for column names using multiple like criteriaPandas 使用多个类似条件过滤列名
【发布时间】:2021-02-16 00:36:06
【问题描述】:

我想使用 pandas 数据框过滤器的简单性,但使用多个 LIKE 标准。我在数据框中有很多列,我想将列标题组织到不同的列表中。

例如 - 任何包含“时间”的列标题。

df.filter(like='time',axis=1)``

然后是任何包含“分钟”或“秒”的列。但是,如何在这个简单、干净的语句中允许多个标准呢?我已经尝试过多次这样的迭代,有没有办法这样做或者这个语句不允许这样做?如果没有,欢迎使用其他简单、干净的方法!

df.filter(like=('mins','secs'),axis=1)

【问题讨论】:

标签: python pandas filter


【解决方案1】:

不要使用likelike 用于保留like in label == True 的标签。

您希望 DataFrame.filter regex 类型过滤,将您的子字符串与 | 连接

import pandas as pd
df = pd.DataFrame(data=1, columns=['foo', 'bar', 'foobar', 'bazz'], index=[0])

df.filter(regex='foo|bar')
#   foo  bar  foobar
#0    1    1       1

如果您希望过滤“不喜欢”,我发现使用列表推导来查找要保留的标签更容易。在这里,我们排除任何包含 'foo''bar' 的标签

cols = [label for label in df.columns if not any(x in label for x in ['foo', 'bar'])]

df[cols]
#   bazz
#0     1

【讨论】:

  • 谢谢!如果我想要not like,这种方法是否简单?
  • @paranormaldist 我发现regex 要创建包含 X 或 Y 的匹配项非常复杂......我认为在这种情况下你会更好有一个简单的列表理解,但也许一些正则表达式大神会不同意
  • 对于逆我也会考虑,df.loc[:,~df.columns.str.contains('foo|bar')] 但是是的,我同意 - 当不需要时,不要使用正则表达式 :)
猜你喜欢
  • 2017-03-07
  • 2021-09-01
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 2018-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多