【问题标题】:Get all the emails and the word just before the email starts在电子邮件开始之前获取所有电子邮件和单词
【发布时间】:2020-12-21 19:51:48
【问题描述】:

我正在尝试解析我的数据集以获取所有电子邮件和电子邮件之前的单词。例如,如果我有这样的一行:

sno                                                text
1        From: m.kro@b.org To: Cha.Sh@dys.com Hi my name is Sam and my email is samwise@gmail.com

然后我想将其捕获为:

sno                                                text                                              emails
1        From: m.kro@b.org To: Cha.Sh@dys.com Hi my name is Sam and my email is samwise@gmail.com    [From : m.kro@b.org ,To: Cha.Sh@dys.com, is samwise@gmail.com] 

到目前为止我尝试过的解决方案:

我已尝试使用“find_all”功能来获取所有电子邮件,但在电子邮件开始前获取单词时遇到问题。

df['Full Comments'].str.findall('(\S+@\S+)').str[0]

对此的任何帮助表示赞赏。谢谢。

【问题讨论】:

    标签: python pandas numpy text nlp


    【解决方案1】:

    试试:

    pat = '([\w:]+ [\w\.]+@[\w\.]+)'
    
    df['emails'] = df.text.str.extractall(pat).groupby(level=0)[0].agg(list)
    

    更新:您可以使用unstack 将单词提升为列标题:

    emails = (df.text.str.extractall(pat)
           .reset_index('match', drop=True)
           .set_index([0],append=True)[1]
           .unstack()
        )
    

    df = df.join(电子邮件)

    输出(没有连接部分):

    0       From:             To:                 is 
    0  m.kro@b.org  Cha.Sh@dys.com  samwise@gmail.com
    

    【讨论】:

    • 完美!正是我想要的。还有一种方法可以根据第一个单词制作列吗?在该列中,电子邮件就在那里。
    猜你喜欢
    • 1970-01-01
    • 2014-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    相关资源
    最近更新 更多