Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用列表使用正则表达式筛选数据帧_Python_Pandas - Fatal编程技术网

Python 使用列表使用正则表达式筛选数据帧

Python 使用列表使用正则表达式筛选数据帧,python,pandas,Python,Pandas,我有以下列的数据框架:Hello,World,Python,Hello_X,World_X,Python_X 还有,我有这个列表:[“你好”,“世界”] 使用该列表,我想过滤数据帧并保留以下列:Hello,World,Hello_X,World_X 请注意,我在实际数据框中有数千列,因此请不要提供手动解决方案。 您可以创建一个正则表达式字符串,如Hello | World |。。。自动从您正在搜索的单词列表中选择,然后使用过滤器应用它: 检查此正则表达式对象 方法1 方法2 输出: Column

我有以下列的数据框架:Hello,World,Python,Hello_X,World_X,Python_X

还有,我有这个列表:[“你好”,“世界”]

使用该列表,我想过滤数据帧并保留以下列:Hello,World,Hello_X,World_X

请注意,我在实际数据框中有数千列,因此请不要提供手动解决方案。
您可以创建一个正则表达式字符串,如Hello | World |。。。自动从您正在搜索的单词列表中选择,然后使用过滤器应用它:


检查此正则表达式对象

方法1

方法2

输出:

Columns: [Hello, World, Hello_X, World_X]

我建议使用一个改进的正则表达式来解决这个问题,它将采用列名和名称,加上所需的下划线,再加上一些不仅仅是“X”字母的内容。regexp将不匹配以相同方式开始的名称,并且需要在所需名称后面加下划线+任何内容

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))

但是要小心,如果所选列的名称中包含|,则此选项可能会中断。如果是这种情况,则|必须用\ |在cols中转义;如果所选列的名称以相同的字母开头,则此选项可能会中断。见鬼,你好,你两个都不要。regexp可以改进。OP应该提供更多关于这方面的详细信息。让我们等待他会告诉我们什么。是的,确切地说,没有更清楚的意图,我们只能假设我allready在第一行提到改变regex对象不要说我认为“X”应该是什么?而不仅仅是“X”。。所以最好在regexp中使用“.*?”请显示一段代码,X是什么?只是“X”字母还是什么?在我下面的答案中,我认为与X完全匹配的是任何东西。
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]
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))