在pandas中使用filter在同一时刻得到精确匹配和部分匹配

2024-06-28 11:22:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,看起来像这样:

Y2000   Y2001   Y2002    Item    Item Code
34        43      65      12       Test

我要提取Y2000、Y2001、Y2002和Item列。我不想提取“项目代码”列。在不显式指定列名的情况下,如何做到这一点,因为我在完整的数据帧中有大量的列?现在,我正在使用filter命令,但它对我无效:

^{pr2}$

它只返回一个空的数据帧


Tags: 数据项目代码test命令情况codefilter
2条回答

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位数字,然后在这里以stop$'Item'结尾,在结尾处$

根据^{}的文档,您需要regex参数:

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

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

相关问题 更多 >