首页 > 解决方案 > Pandas:每行取一个字符串,用逗号分隔,并将唯一的单词添加到列表中

问题描述

样本df:

filldata = [['5,Blue,Football', 3], ['Baseball,Blue,College,1993', 4], ['Green,5,Football', 1]]
df = pd.DataFrame(filldata, columns=['Tags', 'Count'])

我想要一个列中使用的唯一单词列表Tags。所以我试图遍历 df 并拉出每一行Tags,拆分,并将单词添加到列表中。我可以检查并只添加唯一的单词,或者将它们全部添加,然后只提取唯一的。如果可能的话,我想要两种方法的解决方案,看看哪个更快。
所以预期的输出应该是:

5, Blue, Football, Baseball, College, 1993, Green.

我试过这些:

tagslist = df['Tags'][0].split(',')  # To give me initial starting words
def adduniquetags(newtags, tagslist):
    thesetags = newtags.split(',')
    tagslist = tagslist.extend(thesetags)
    return tagslist
tagslist = [adduniquetags(row, tagslist) for row in df['Tags']]

tagslist = df['Tags'][0].split(',')
def adduniquetags(newtags, tagslist):
    thesetags = newtags.split(',')
    for word in thesetags:
            if word not in tagslist:
                tagslist.append(word)   
tagslist = [adduniquetags(row, tagslist) for row in df['Tags']]

这两个本质上是相同的,一个只寻找独特的词。这两个都返回一个“无”列表。
我也试过这个:

tagslist = df['Tags'][0].split(',')
def adduniquetags(newtags, tagslist):
    thesetags = newtags.split(',')
    tagslist = list(set(tagslist + thesetags))
    return tagslist
tagslist = [adduniquetags(row, tagslist) for row in df['Tags']]

这是为每一行添加唯一值,但不是每行中的单词。因此,即使我尝试在 上拆分,,它仍然将整个文本视为一个文本,而不是使用字符串中的单个单词。

标签: pythonpandasdataframesplit

解决方案


用于Series.str.split拆分字符串,然后用于np.hstack水平堆叠 column 中的所有列表Tags,然后在此堆叠数组上使用np.unique,以查找数组中的唯一元素。

lst = np.unique(np.hstack(df['Tags'].str.split(','))).tolist()

Series.explode使用+的另一个可能的想法Series.unique

lst = df['Tags'].str.split(',').explode().unique().tolist()

结果:

['1993', '5', 'Baseball', 'Blue', 'College', 'Football', 'Green']

推荐阅读