从数据集

时间:2016-05-14 08:18:06

标签: python regex pandas dataset data-cleaning

我有一大堆数据,其中包含多列和超过100个csv文件中的大约10k行,现在我只关注一个带有消息格式的列,我想要从中提取两个参数。我在周围进行了广泛的搜索,我发现了两个似乎很接近的解决方案,但还不足以解决这个问题。 ONE& TWO

输入:列名"Text",每条消息都是csv中的一个单独行。

"Let's Bounce!😉  #[message_1]

 Loving the energy & Microphonic Mayhem while…" #[message_2]

RT @IVijayboi: #[message_3]   @Bdutt@sardesairajdeep@rahulkanwal@abhisarsharma@ppbajpayi@Abpnewd@Ndtv@Aajtak#Jihadimedia@Ibn7 happy #PresstitutesDay

 "RT @RakeshKhatri23: MY LIFE #[message_4]

        WITHOUT YOU 

        IS

        LIKE 

        FLOWERS WITHOUT 

        FRAGRANCE 💞💞

        ~True Love~"


  Me & my baby ðŸ¶â¤ï¸ðŸ‘­ @ Home Sweet Home  #[message_5]

输入是一个CSV文件,其中包含数据中的其他几列,但我只对此列感兴趣。我想将输入中的@name#keyword分隔为新列,如:

预期产出

text, mentions, keywords 
[message], NAN, NAN
[message], NAN, NAN
[message], @IVijayboi, #Jihadimedia  
           @Bdutt      #PresstitutesDay
           @sardesairajdeep 
           @rahulkanwal 
           @abhisarsharma 
           @ppbajpayi 
           @Abpnewd 
           @Ndtv 
           @Aajtak  
           @Ibn7

正如我们在输入中看到的第一条和第二条消息没有@#所以列值为NAN,但对于第三条消息,它有10 @和2 #个关键字。

简单来说,如何将@提及的名称和#关键字从邮件中分离到单独的列中。

1 个答案:

答案 0 :(得分:1)

我怀疑你想使用正则表达式。我不知道您的@ mentions和#关键字可以采用的确切格式,但我猜想@([a-zA-Z0-9]+)[^a-zA-Z0-9]形式的某些内容可行。

#!/usr/bin/env python3
import re

test_string = """Text
"Let's Bounce!😉
Loving the energy & Microphonic Mayhem while…"
RT @IVijayboi: etc etc"""

mention_match = re.compile('@([a-zA-Z0-9]+)[^a-zA-Z0-9]')
for match in mention_match.finditer(test_string):
    print(match.group(1))

hashtag_match = re.compile('#([a-zA-Z0-9]+)[^a-zA-Z0-9]')
for match in hashtag_match.finditer(test_string):
    print(match.group(1))

希望这足以让你开始使用。