我只想提取字符串的完整单词
我有这个df:
Students Age
0 Boston Terry Emma 23
1 Tommy Julien Cambridge 20
2 London 21
3 New York Liu 30
4 Anna-Madrid+ Pauline 26
5 Mozart Cambridge 27
6 Gigi Tokyo Lily 18
7 Paris Diane Marie Dive 22
我想从字符串中提取完整的单词,而不是其中的一部分(例如:如果Liu是用名字写的,我想要Liu,如果Liu是用名字写的,我想要iu,如果Liu是用名字写的,我想要iu,因为Liu不是iu。)
cities = ['Boston', 'Cambridge', 'Bruxelles', 'New York', 'London', 'Amsterdam', 'Madrid', 'Tokyo', 'Paris']
liked_names = ['Emma', 'Pauline', 'Tommy Julien', 'iu']
所需df:
Students Age Cities Liked Names
0 Boston Terry Emma 23 Boston Emma
1 Tommy Julien Cambridge 20 Cambridge Tommy Julien
2 London 21 London NaN
3 New York Liu 30 New York NaN
4 Anna-Madrid+ Pauline 26 Madrid Pauline
5 Mozart Cambridge 27 Cambridge NaN
6 Gigi Tokyo Lily 18 Tokyo NaN
7 Paris Diane Marie Dive 22 Paris NaN
我尝试了以下代码:
pat = f'({"|".join(cities)})'
df['Cities'] = df['Students'].str.extract(pat, expand=False)
pat = f'({"|".join(liked_names)})'
df['Liked Names'] = df['Students'].str.extract(pat, expand=False)
我的城市代码有效,我只需要修复“喜欢的名字”的问题
如何做到这一点?非常感谢
您可以进行额外的检查,查看匹配的名称是否在
Students
列中我想你要找的是词的界限。在正则表达式中,它们可以用
\b
表示。一个难看的(尽管可行)解决方案是修改liked_names
列表以包括单词边界,然后运行代码:更好的解决方案是在创建正则表达式时包含单词边界
我第一次尝试使用
\s
,即空格,但在列表的末尾不起作用,因此\b
是解决方案。您可以查看https://regular-expressions.mobi/wordboundaries.html?wlr=1以了解一些详细信息您可以尝试以下正则表达式:
印刷品:
相关问题 更多 >
编程相关推荐