【问题标题】:Looking for words in a dataframe column that begin with "#" for each row, then adding them to a new column在每行以“#”开头的数据框列中查找单词,然后将它们添加到新列中
【发布时间】:2021-06-24 21:05:52
【问题描述】:

我有一个名为“推文”的专栏。我想提取所有带有标签的单词,然后放入一个新列中。 这是我尝试过的代码:

for row in df.split(' '):
    for word in row:
        if word.startswith('#'):
            return row
     else: 
        return np.nan

问题是它每行只返回一个标签。因此,如果一行有“#word1 和 #word2”,它只会返回“#word1”

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    您可能想看看 pandas 的字符串函数,例如带有正则表达式的 extractall()。示例:

    tweets = ["lorem ipsum #hashtag01 #hashtag02 #another_one",
             "#one ipsum #two lorem #some_more"]
    
    df = pd.DataFrame(tweets, columns=["tweets"])
    df.tweets.str.extractall(r"(#\w+)").unstack()
    

    (#\w+) 将所有字符串捕获为以# 开头并具有一个或多个后续单词字符\w+ 的组。

    [输出]

    match   0           1           2
    0       #hashtag01  #hashtag02  #another_one
    1       #one        #two        #some_more
    

    如果您想将所有主题标签提取到一个列并确保主题标签始终用空格分隔(如您的示例所示),则可以使用以下代码行:

    df["hashtags] = df.tweets.apply(lambda x: [x for x in x.split(" ") if x.startswith("#")])
    

    [输出]

    0    [#hashtag01, #hashtag02, #another_one]
    1                  [#one, #two, #some_more]
    

    【讨论】:

    • 我如何将它们组合到一个列表中,使其成为具有行值 [#hashtag01, #hashtag02, #anotherone] 的单列
    • 我已根据您的问题添加了第二个选项的代码。您只需使用 apply() 函数的结果在数据框中创建一个新列。
    猜你喜欢
    • 2016-02-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 2021-10-24
    • 2017-03-26
    • 2023-03-29
    • 2021-09-28
    • 1970-01-01
    相关资源
    最近更新 更多