我一直在到处寻找,但我还没有找到任何解决办法。。。
例如,我的数据框中有一个名字列表,比如:佩内洛普·迪恩斯、科琳·M·珀塞尔、萨利·西伯恩、特蕾莎·T·阿兰达等等。
我当前的正则表达式是
^[A-Z][a-z]+,?\s+(?:[A-Z][a-z]*\.?\s*)?[A-Z][a-z]+
这抓住了大部分的名字。然而,在数据框中,我也有类似“XXX的特许房地产,YYY的数字营销人员”这样的行。上述Regex还包括“特许房地产”和“数字营销人员”。我只想选择只有名称的行,我该怎么做?我可以写正则表达式来不捕捉任何包含“at”的单词吗
++++
所以我正在处理一列多行的数据帧,
数据帧如下所示:
lst = [Penelope Deans, 1/1/2020, Digital Marketer at XXX, Corinne M. Percell, 1/1/2020, Tereasa T., Licensed Real Estate at YYY]
df = pd.DataFrame(lst)
df
Info
0 Penelope Deans
1 1/1/2020
2 Digital Marketer at XXX
3 Corinne M. Percell
4 1/1/2020
5 Tereasa T.
6 Licensed Real Estate at YYY
name_pat = r"^[A-Z][a-z]+,?\s+(?:[A-Z][a-z]*\.?\s*)?[A-Z][a-z]+"
df['Info'].str.findall(name_pat)
输出是
Info
0 Penelope Deans
1 []
2 Digital Marketer
3 Corinne M. Percell
4 []
5 Tereasa T.
6 Licensed Real Estate
我期待的是:
Info
0 Penelope Deans
1 []
2 []
3 Corinne M. Percell
4 []
5 Tereasa T.
6 []
关键是决定什么决定了一个值是名称,什么不是名称
从您的示例中,似乎
'Penelope Deans'
、'Corinne M. Percell'
和'Tereasa T.'
是名称,而'1/1/2020'
不是名称(因为它有数字和斜杠),而'Digital Marketer at XXX'
也不是,因为它遵循<namelike> at <namelike>
模式请注意,根据这些规则
'John at Smith'
也不会是名称。但是,由于“at”在英语中不是一个普通的贵族语气词,所以它应该能起作用,而且你也不希望专门涵盖外国名字(即使这样,“at”在名字中也很少见)使用正则表达式的Python解决方案:
结果:
相关问题 更多 >
编程相关推荐