首页 > 解决方案 > 如何使用以任何大写字母开头的正则表达式从熊猫系列中提取字符串

问题描述

我想将字符串系列提取到一个新系列中,该系列仅包含以原始系列数据的大写字母开头的字符串。

我之前尝试过在熊猫系列中使用正则表达式并且效果很好,所以我将其用作参考。下面的代码是我在当前问题中使用的代码。

harness['new'] = harness['Material'].str.extract('.*\-(.*)\-.*',expand=True)

下面的代码是我目前用来提取以大写字母开头的字符串的代码

In [63]:
batch1['Wire Name'].head()

Out[63]:
0    2HC31A20
1    HC30A20
2    2HC42A20
3    2HC5H20
4    HC4M20

In [64]:
batch1['Grouping'] = batch1['Wire Name'].str.extract('^[A-Z].*',expand=True)
batch1['Grouping'].head()

Out [64]:
ValueError: pattern contains no capture groups

我希望结果是:

0    HC31A20
1    HC30A20
2    HC42A20
3     HC5H20
4     HC4M20

你觉得哪里不对?我已经从正则表达式页面和使用它的示例中进行了检查,但是当我使用上面的代码时它不起作用。

标签: pythonregexpandasdataframe

解决方案


您可以使用:

df = pd.DataFrame({'text': ['2HC31A20', 'HC30A20', '2HC42A20','2HC5H20', 'HC4M20']})
df['text'].str.extract(r'(^[A-Z][\w]+)', expand=False)

0        NaN
1    HC30A20
2        NaN
3        NaN
4     HC4M20

描述:

^[A-Z]: 这意味着仅以大写字母开头。
[\w]+: 这意味着取所有的A-Z, a-z, 0-9, _大写字母。


推荐阅读