我有一个数据帧,其中一列包含一堆随机文本。 在随机文本中,每行有一个名称。 我想在数据帧中创建一个仅是名称的新列。 所有这些名称都以大写字母开头,前面都有诸如"Meet"name is"hello to"之类的短语。 我相信我应该使用正则表达式,但不确定除此之外。
数据帧单元格中的示例文本:"这是约翰。 他是在澳大利亚巡回演出的摇滚明星。(想要的名字是约翰("认识兰迪。 他可能有地球上最好的发型。 (想要的名字是兰迪("向迈克问好! 他的小胡子在县集市上获得了一等奖。 (想要的名字是迈克(
我认为代码应该是这样的:df['name'][df['text'].str.extract('r'________'(
首先获取正则表达式模式。看到你的模式,我的逻辑是:
-
每个名字都以大写字母开头,
-
名称前有一个空格
-
开始在名称后有一个字符(感叹号或句号(,
-
名字有空格后,甚至地球也会被计算在内,这是我们不想要的
以下内容的正则表达式是:
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