【问题标题】:Remove one column content from another (A-B) in pandas dataframe从熊猫数据框中的另一列(A-B)中删除一列内容
【发布时间】:2022-11-21 22:55:25
【问题描述】:

我的 pd 数据框如下所示:

tweet hashtag
bla banana bla bla 23 [banana 23]
bla bla apple [apple]

我想执行 A-B 并从 tweet 列中删除 hashtag 列的内容,获得以下内容:

tweet hashtags
bla bla bla [banana 23]
bla bla [apple]

我尝试了几种方法:

和:

def remove_hashtags(df):
    df.tweet = [df.tweet.apply(" ".join(word)) for word in df['tweet'].apply(word_tokenize) if  word not in df['hashtags']]
    return df`

我得到 TypeError: unhashable type: 'list' 和

def remove_hashtags(df):
    df.tweet = [df.tweet.apply(" ".join(word)) for word in df['tweet'].apply(word_tokenize) if  word not in df['hashtags'].apply(word_tokenize)]
    return df

我收到 TypeError: expected string or bytes-like object ` 我再次尝试删除潜在的空值并将 everythinig 转换为字符串,但也不起作用。

我终于尝试在 word 标记化之前对 tweet 列进行 sent_tokenize:

def remove_tweets(df):
    for sent in sent_tokenize(df.tweet):
        for word in word_tokenize(sent):
            df["tweet2"] = df["tweet2"].apply(" ".join(word))
    return df

但又得到了:TypeError: expected string or bytes-like object

我终于尝试了:

def remove_tweets(df):
    clean_text = []
    for word in word_tokenize(df.tweet):
        if word not in df.hashtags:
            clean_text.append(word)
    df['tweet2'] = clean_text
    return df

但得到 TypeError: expected string or bytes-like object

ps 在通过 df['hashtags'].apply(lambda x: ','.join(map(str, x))) 从列表中提取主题标签列元素后,我也尝试了我提到的所有内容,但仍然无效。

有什么提示吗?

【问题讨论】:

    标签: pandas dataframe typeerror


    【解决方案1】:

    我会在列表理解中使用正则表达式:

    import re
    df['tweet2'] = [re.sub(fr"(?:{'|'.join(l)})", '', t)
                    for t,l in zip(df['tweet'], df['hashtag'])]
    

    输出(为清楚起见作为新列 tweet2):

                       tweet       hashtag         tweet2
    0  bla banana bla bla 23  [banana, 23]  bla  bla bla 
    1          bla bla apple       [apple]       bla bla 
    

    以不同方式处理空间:

    import re
    df['tweet2'] = [' '.join(x for x in re.split(fr"s*(?:{'|'.join(l)})s*", t) if x)
                    for t,l in zip(df['tweet'], df['hashtag'])]
    

    输出:

                       tweet       hashtag       tweet2
    0  bla banana bla bla 23  [banana, 23]  bla bla bla
    1          bla bla apple       [apple]      bla bla
    

    【讨论】:

    • 我试过这个:它确实从推文中删除了主题标签,但不识别它是一个词,即它也删除了任何其他出现的单个字母。例如推文:“successivamente farci amicizia torino”,标签:“torino”,输出:“successvamee fac amcza”。为什么会这样?非常感谢您!
    • @duecci 你需要添加单词边界(),尝试更新
    猜你喜欢
    • 2018-03-23
    • 2018-01-01
    • 2017-05-14
    • 2016-11-12
    • 2021-12-02
    • 1970-01-01
    • 2013-12-04
    • 2016-09-15
    相关资源
    最近更新 更多