用正则表达式过滤数据框,使用列表

时间:2021-03-07 09:30:07

标签: python pandas

我有包含以下列的数据框:HelloWorldPythonHello_XWorld_XPython_X。< /p>

另外,我有这个列表:['Hello','World']

使用该列表,我想过滤数据框并保留这些列:HelloWorldHello_XWorld_X

  • 请注意,我在真实数据框中有数千列,因此请不要提供“手动”解决方案。

3 个答案:

答案 0 :(得分:3)

您可以从您要搜索的单词列表中自动生成一个像 (Hello|World|...) 这样的正则表达式字符串,然后用 filter 应用它:

df = pd.DataFrame(columns=[
    'Hello', 'World', 'Python', 'Hello_X', 'World_X', 'Python_X'])

cols = ['Hello', 'World']
df.filter(regex='(' + '|'.join(cols) + ')')

答案 1 :(得分:0)

我用改进的正则表达式提出了这个解决方案,它将采用列名和名称,加上下划线(必需),再加上一些东西(不仅仅是“X”字母)。正则表达式不会匹配以相同方式开头的名称,并且需要下划线 + 所需名称后的任何内容。

import numpy as np
import pandas as pd
import re

df = pd.DataFrame( np.array(([1, 2, 3, 4, 5, 6, 7], [11, 12, 13, 14, 15, 16, 17] )),
        columns=['Hello', 'World', 'Python', 'Hellow', 'Hello_X', 'World_X', 'Python_X'])

cols = ['Hello', 'World']

### building the regexp to match either column names or columns names with one '_' and something after

regex = ['(^'+x+'(_.*)+)' for x in cols] + ['(^'+x+'$)' for x in cols]
regex = r'|'.join(regex)

print(df.filter(regex=regex))

答案 2 :(得分:-1)

检查这个正则表达式对象

方法一

df.filter(regex=r'(Hello(_X)?|World(_X)?)')

方法 2

import numpy as np
import pandas as pd
import re
df = pd.DataFrame(columns=['Hello', 'World', 'Python', 'Hello_X', 'World_X', 'Python_X'])

regex=re.compile(r'(Hello(_X)?|World(_X)?)')

up_col = [i for i in df.columns if regex.search(i)]
df[up_col]

输出:

Columns: [Hello, World, Hello_X, World_X]
相关问题