首页 > 解决方案 > 正则表达式跳过一位并提取所有

问题描述

数据

  t=  pd.DataFrame({'A': ['3.1 Food', '3.1.1 Bread', '3.1.1.1 Chicken'], 'Val1': [10, 14, 94], 'Val2': [1,2,3], 'Val3' : [100, 120, 130]}, 
                      columns=['A', 'Val1'])

                 A  Val1
0         3.1 Food    10
1      3.1.1 Bread    14
2  3.1.1.1 Chicken    94

预期产出

我正在尝试使用条件正则表达式来提取值并形成一个新列,输出如下。我只对模式\d{1}.\d{1}.\d{1}的值感兴趣

A              Val1   SubCategory
3.1 Food        10        nan
3.1.1 Bread     14    3.1.1 Bread
3.1.1.1 Chicken 94        nan

我试过的

t['SubCategory'] = t['A'].str.extract(r'^(\d{1}.\d{1}.\d{1}.*)')

       A        Val1          SubCategory
3.1   Food       10           nan
3.1.1 Bread     14        3.1.1 Bread
3.1.1.1 Chicken 94      3.1.1.1 Chicken

我无法限制正则表达式,使其仅查看仅具有 3.1.1 的那些。有人可以启发我吗?

标签: pythonpandasextract

解决方案


只需在末尾添加一个空格分隔符:

import pandas as pd


t=  pd.DataFrame({'A': ['3.1 Food', '3.1.1 Bread', '3.1.1.1 Chicken'], 'Val1': [10, 14, 94], 'Val2': [1,2,3], 'Val3' : [100, 120, 130]},
                      columns=['A', 'Val1'])
t['SubCategory'] = t['A'].str.extract(r'^(\d{1}\.\d{1}\.\d{1})\s')

print(t)

                 A  Val1 SubCategory
0         3.1 Food    10         NaN
1      3.1.1 Bread    14       3.1.1
2  3.1.1.1 Chicken    94         NaN

推荐阅读