Python 数据帧正则表达式从文本单元格创建新列



我有一个数据帧,其中一列包含一堆随机文本。 在随机文本中,每行有一个名称。 我想在数据帧中创建一个仅是名称的新列。 所有这些名称都以大写字母开头,前面都有诸如"Meet"name is"hello to"之类的短语。 我相信我应该使用正则表达式,但不确定除此之外。

数据帧单元格中的示例文本:"这是约翰。 他是在澳大利亚巡回演出的摇滚明星。(想要的名字是约翰("认识兰迪。 他可能有地球上最好的发型。 (想要的名字是兰迪("向迈克问好! 他的小胡子在县集市上获得了一等奖。 (想要的名字是迈克(

我认为代码应该是这样的:df['name'][df['text'].str.extract('r'________'(

首先获取正则表达式模式。看到你的模式,我的逻辑是:

  1. 每个名字都以大写字母开头,

  2. 名称前有一个空格

  3. 开始在名称后有一个字符(感叹号或句号(,

  4. 名字有空格后,甚至地球也会被计算在内,这是我们不想要的

以下内容的正则表达式是:

re1='(\s+)'                    # White Space 1
re2='((?:[A-ZÀ-ÿ][a-zÀ-ÿ]+))'   # Word 1
re3='([.!,?\-])'               # Any Single Character 1
re4='(\s+)'                    # White Space 2

我使用这个网站来获取我的正则表达式:https://txt2re.com/

现在做:

df['name'] = df['text'].str.extract(re1+re2+re3+re4, expand=True)[1]

输出:

0     John
1    Randy
2     Mike
3   Amélie
Name: name, dtype: object

最新更新