是否可以使用fnmatch.在pandas数据框上过滤而不是正则表达式?



我有一个数据框架如下所示,例如,我想只有测试与某些正则表达式是我更新的数据框架的一部分。我想知道是否有一种方法来做它与fnmatch而不是正则表达式?

data = {'part1':[0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1],
'part2':[0, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1],
'part3':[0, 1, 0, 1, 0, 0, 1, 1, 1, 0, 0, 1],
'part4':[0, 0, 0, 1, 1, 0, 0, 1, 0, 1, 0, 1],
'part5':[1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1],
'part6':[1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1],
'part7':[1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1],
'part8':[1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 0, 1],
'part9':[1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1 ],
'part10':[1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1],
'part11':[0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1],
'part12':[0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1]
}
df = pd.DataFrame(data, index =['test_gt1',
'test_gt2',
'test_gf3',
'test_gf4',
'test_gt5',
'test_gg6',
'test_gf7',
'test_gt8',
'test_gg9',
'test_gf10',
'test_gg11',
'test12'
])

我希望能够创建一个新的数据帧,只包含test_gg或test_gf或test_gt使用fnmatch.filter?我看到的所有示例都与list有关,那么我如何将其应用于数据框架呢?

在索引上导入fnmatch.filter和filter:

from fnmatch import filter
In [7]: df.loc[filter(df.index, '*g*')]
Out[7]:
part1  part2  part3  part4  part5  part6  part7  part8  part9  part10  part11  part12
test_gt1       0      0      0      0      1      1      1      1      1       1       0       0
test_gt2       1      1      1      0      0      1      1      0      0       1       1       1
test_gf3       0      0      0      0      1      1      1      1      1       1       0       0
test_gf4       0      1      1      1      0      1      1      1      0       1       0       1
test_gt5       0      1      0      1      0      1      0      1      0       1       0       1
test_gg6       0      0      0      0      1      1      1      1      1       1       0       0
test_gf7       1      1      1      0      0      1      1      0      0       1       0       1
test_gt8       0      1      1      1      0      1      1      1      0       1       0       0
test_gg9       1      0      1      0      1      0      1      0      1       0       1       0
test_gf10      0      1      0      1      0      1      0      1      0       1       0       1
test_gg11      0      0      0      0      0      0      0      0      0       0       0       0

您也可以只使用pandas的filter函数和regex,并对索引进行过滤:

In [8]: df.filter(regex=r".+g.+", axis='index')
Out[8]:
part1  part2  part3  part4  part5  part6  part7  part8  part9  part10  part11  part12
test_gt1       0      0      0      0      1      1      1      1      1       1       0       0
test_gt2       1      1      1      0      0      1      1      0      0       1       1       1
test_gf3       0      0      0      0      1      1      1      1      1       1       0       0
test_gf4       0      1      1      1      0      1      1      1      0       1       0       1
test_gt5       0      1      0      1      0      1      0      1      0       1       0       1
test_gg6       0      0      0      0      1      1      1      1      1       1       0       0
test_gf7       1      1      1      0      0      1      1      0      0       1       0       1
test_gt8       0      1      1      1      0      1      1      1      0       1       0       0
test_gg9       1      0      1      0      1      0      1      0      1       0       1       0
test_gf10      0      1      0      1      0      1      0      1      0       1       0       1
test_gg11      0      0      0      0      0      0      0      0      0       0       0       0

您也可以直接使用like:

df.filter(like="g", axis='index')
Out[12]:
part1  part2  part3  part4  part5  part6  part7  part8  part9  part10  part11  part12
test_gt1       0      0      0      0      1      1      1      1      1       1       0       0
test_gt2       1      1      1      0      0      1      1      0      0       1       1       1
test_gf3       0      0      0      0      1      1      1      1      1       1       0       0
test_gf4       0      1      1      1      0      1      1      1      0       1       0       1
test_gt5       0      1      0      1      0      1      0      1      0       1       0       1
test_gg6       0      0      0      0      1      1      1      1      1       1       0       0
test_gf7       1      1      1      0      0      1      1      0      0       1       0       1
test_gt8       0      1      1      1      0      1      1      1      0       1       0       0
test_gg9       1      0      1      0      1      0      1      0      1       0       1       0
test_gf10      0      1      0      1      0      1      0      1      0       1       0       1
test_gg11      0      0      0      0      0      0      0      0      0       0       0       0

最新更新