使用正则表达式搜索和过滤pandas数据帧

时间:2015-09-16 16:49:02

标签: python regex pandas

我很感激你的帮助。我有一个熊猫数据帧。我想使用正则表达式搜索数据框的3列,然后返回符合搜索条件的所有行,按我的列之一排序。我想把它写成一个函数,所以如果可能的话我可以用其他标准来实现这个逻辑,但我不太清楚如何做到这一点。

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

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

print df[~idx1]

但我无法弄清楚如何采取这种类型的操作,并使用多个列执行它然后排序。有人有任何提示吗?

1 个答案:

答案 0 :(得分:2)

您可以使用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

您可以选择列vhighhigh中包含字符串col1col2的所有行,如下所示:

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函数返回一个布尔掩码,元素为True表示至少有一列符合搜索条件。然后,可以使用它在原始DataFrame上执行选择。

输出:

    col1  col2  val
0  vhigh   eee  100
2   vlow  high  300

然后,按列对结果进行排序,例如val列,你可以这样做:

df[mask].sort('val')