在pandas中使用过滤器可以同时获得完全匹配和部分匹配

时间:2015-09-22 17:10:07

标签: python pandas

我有一个如下所示的数据框:

Y2000   Y2001   Y2002    Item    Item Code
34        43      65      12       Test

我想提取列Y2000,Y2001,Y2002和Item。我不想提取物品代码'柱。如何在不明确指定列名的情况下执行此操作,因为我在完整数据框中有大量列?现在,我正在使用filter命令,但它对我不起作用:

df.filter(like='Y|Item')

它只返回一个空数据框

2 个答案:

答案 0 :(得分:1)

根据filter的文档,您需要regex参数:

df.filter(regex='Y|Item$')

将保留满足re.search(regex, col) == True的列。 like版本对列名称执行子字符串搜索,这就是为什么在提供类似正则表达式的输入(例如'Y|Item')时它不起作用的原因。

答案 1 :(得分:1)

IIUC然后您可以使用正则表达式模式:

In [2]:
df = pd.DataFrame(columns=['Y2000','Y2001','Y2002','Item','Item Code'])
df

Out[2]:
Empty DataFrame
Columns: [Y2000, Y2001, Y2002, Item, Item Code]
Index: []

In [8]:
df.filter(regex='^Y\d{4}$|^Item$')

Out[8]:
Empty DataFrame
Columns: [Y2000, Y2001, Y2002, Item]
Index: []

所以^Y\d{4}$|^Item$寻找' Y'在开始时跟随4位数字,然后在此处终止,并停止$'项目'在开始和结束时停止$