以相同开头但以数字结尾的字符串的正则表达式到子集 pandas 数据框

regex expression for strings that start the same but end with number to subset pandas dataframe

可能是一个基本问题,但是,假设我有一个数据框,如下所示:

string_lst = ["bar0001", "bar0002", "bar0003", "bar0003", "bar0004", "bar0004", "bar0005", "bar0006"]
a = pd.DataFrame({'foo': string_lst,
             'test':[0,1,2,3,4,5,6,7]})

如何对数据框进行子集化,以便从 3:6 中获取所有“条形”?

我猜的是:

a['foo'== regex 3:6]?

我以为 select string_lst 的最后 n 个数字,但实际数据帧会有不同数量的数字,例如 bar2005bar20005,所以我不确定如何进行。

非常感谢!

您的正则表达式字符串可以是:“bar[0-9]*” 这将允许:bar1、bar01、bar000000000001 但不允许 bar 1 和 bar001a

IIUC,

a[a['foo'].str.contains('bar0+[3-6]', regex=True)]

输出:

       foo  test
2  bar0003     2
3  bar0003     3
4  bar0004     4
5  bar0004     5
6  bar0005     6
7  bar0006     7

如果您的数据集具有相同的模式(条形后跟数字),您可以执行如下操作。这将处理 'bar004'、'bar00004' 等情况

a.loc[a.foo.str.extract('(\d+)')[0].astype(float).between(3,6)]

你需要什么?

1.Select 索引 3 到 6?

a.loc[3:6,:]


       foo  test
3  bar0003     3
4  bar0004     4
5  bar0004     5
6  bar0005     6



    

Select 柱数 3 到 6?

a['s']=a['foo'].str.extract('(\d$)').astype(int)
a[a.s.ge(3)&a.s.le(6)].drop('s',1)

      foo    test
2  bar0003     2
3  bar0003     3
4  bar0004     4
5  bar0004     5
6  bar0005     6
7  bar0006     7