我有包含以下列的数据框:Hello
、World
、Python
、Hello_X
、World_X
、Python_X
。< /p>
另外,我有这个列表:['Hello','World']
。
使用该列表,我想过滤数据框并保留这些列:Hello
、World
、Hello_X
、World_X
。
答案 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]