python - 正则表达式跳过一位并提取所有
问题描述
数据
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 的那些。有人可以启发我吗?
解决方案
只需在末尾添加一个空格分隔符:
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