我有一大堆数据,其中包含多列和超过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 #
个关键字。
简单来说,如何将@提及的名称和#关键字从邮件中分离到单独的列中。
答案 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))
希望这足以让你开始使用。