如何根据正则表达式从pandas数据集中选择行?

时间:2016-03-31 10:13:25

标签: python pandas dataframe

假设我有这段代码:

import pandas as pd
import re

indexes = [1, 7, 12, 13, 21]
strings = ["a1", "y1", "n1", "d2", "s3"]
doubles = [1.2, 23.09, 6.034, 3.91, 5.2]
d = {"strings": strings, "doubles": doubles}

df = pd.DataFrame(d, index=indexes)

所以这会创建pandas DataFrame:

   doubles strings
1  1.200   'a1'
7  23.090  'y1'
12 6.034   'n1'
13 3.910   'd2'
27 5.2     's3'

我想根据应用于'string'列的正则表达式从此DataFrame中选择行。到目前为止,我找到了一个解决方案:

df[df.strings.str.findall('[0-2]$').str.len() > 0]

我的问题是:有更优雅的方式吗? 我试过了

df[df.strings.filter('[0-2]$') ...]

但我只有错误。

1 个答案:

答案 0 :(得分:1)

您可以使用str.contains并使用相同的正则表达式模式:

In [111]:
df[df['strings'].str.contains('[0-2]$', regex=True)]

Out[111]:
    doubles strings
1     1.200      a1
7    23.090      y1
12    6.034      n1
13    3.910      d2