按str.contains筛选数据

3
我将尝试通过包含以下字符串'io'和'ir'的列来筛选我的大型数据。
df1
index  aio   bir   ckk
1      2     3     4
2      3     4     5

我想创建一个包含'io'和'ir'列的新数据框。 新的数据框应该长这样:

index  aio   bir  
1      2     3    
2      3     4     

我尝试了

df = df[:, str.contains('io','ir')] 

但是我收到了一个错误,说类型对象“str”没有属性“contains”。
2个回答

6
使用 pd.DataFrame.filter 进行筛选。
df.filter(regex='i(o|r)')

       aio  bir
index          
1        2    3
2        3    4

如果您有一组需要进行匹配的事项。
things = ['io', 'ir']
df.filter(regex='|'.join(things))

       aio  bir
index          
1        2    3
2        3    4

替代方案

df.filter(regex='io|ir')

df.loc[:, df.columns.str.contains('io|ir')]

我尝试了这种方法。我可以只用一个单词> df.filter(like='io', axis=0)或者用你提到的方法。然而,当筛选器包含更多单词时,比如'km'、'dt'、'if'、'do',我就会遇到困难。我该如何将所有这些单词组合在一起使用筛选器呢? - Sam
我更新了我的帖子,并猜测了你的意思。否则,你需要展示一个例子来说明你的意思。 - piRSquared
str.contain是一个耗时函数吗?我测试了我的解决方案和筛选器,发现筛选器要快得多... - BENY
非常感谢。我认为问题在于我以这种方式编写代码:df.filter(regex='io'|'or');另外,df.loc[:, df.columns.str.contains('io'|'or')]。非常感谢。现在我明白了,我应该这样写'io|ir'。 - Sam

1
自从您提到了 str.contains
df.loc[:,df.columns.str.contains('io|ir')]
Out[354]: 
       aio  bir
index          
1        2    3
2        3    4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接