Pandas: Каждая строка берет строку, разделенную запятыми, и добавляет уникальное слово в список - PullRequest
1 голос
/ 07 августа 2020

Пример df:

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

Мне нужен уникальный список слов, используемых в столбце Tags. Итак, я пытаюсь l oop через 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']]

Это добавляет уникальные значения для каждой строки, но не слова в каждой строке. Таким образом, даже несмотря на то, что я пытался разделить на ,, он по-прежнему обрабатывает весь текст как один вместо использования отдельных слов из строки.

1 Ответ

2 голосов
/ 07 августа 2020

Используйте Series.str.split для разделения строк, затем используйте np.hstack для горизонтального расположения всех списков в столбце 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']
...