Skip to main content
 首页 » 编程设计

python之使用正则表达式搜索和过滤 pandas 数据框

2024年08月25日25zfyouxi

非常感谢您的帮助。我有一个 Pandas 数据框。我想使用正则表达式搜索数据框的 3 列,然后返回所有符合搜索条件的行,并按我的其中一列排序。我想把它写成一个函数,这样我就可以在可能的情况下用其他标准来实现这个逻辑,但我不太确定该怎么做。

例如,我知道如何这样提取搜索结果(col1 是列名):

idx1 = df.col1.str.contains(r'vhigh|high', flags=re.IGNORECASE, regex=True, na=False) 
 
print df[~idx1] 

但我不知道如何采取这种类型的操作,并用多列执行它,然后进行排序。有人有什么建议吗?

请您参考如下方法:

可以使用apply让代码更简洁。例如,给定这个 DataFrame:

df = pd.DataFrame( 
    { 
        'col1': ['vhigh', 'low', 'vlow'], 
        'col2': ['eee', 'low', 'high'], 
        'val': [100,200,300] 
    } 
) 
print df 

输入:

    col1  col2  val 
0  vhigh   eee  100 
1    low   low  200 
2   vlow  high  300 

您可以在 col1 或 col2 列中选择所有包含字符串 vhigh 或 high 的行作为关注:

mask = df[['col1', 'col2']].apply( 
    lambda x: x.str.contains( 
        'vhigh|high', 
        regex=True 
    ) 
).any(axis=1) 
print df[mask] 

apply 函数在每一列上应用contains 函数(因为默认情况下 axis=0)。 any 函数返回一个 bool 掩码,其中元素 True 表示至少有一个列满足搜索条件。然后可以使用它在原始 DataFrame 上执行选择。

输出:

    col1  col2  val 
0  vhigh   eee  100 
2   vlow  high  300 

然后,按列对结果进行排序,例如val 列,您可以简单地执行以下操作:

df[mask].sort('val')