Присвоение значений неиссякаемому списку в панде - PullRequest
0 голосов
/ 29 июня 2018

У меня есть столбец в dataframe, который содержит списки. Как видно из рисунка ниже.

enter image description here

Я хочу знать, как я могу извлечь все слова из этого столбца без повторяющихся слов, и мне нужно перебрать список уникальных слов от 0 до len(uniquewordlist) и назначить значение каждому слову на основе того, какая итерация Я в.

Спасибо за вашу помощь.

Ответы [ 3 ]

0 голосов
/ 29 июня 2018

Вы можете использовать enumerate и itertools.chain в пределах словаря. set обеспечивает уникальность отображений.

Данные от @ Abhishek.

from itertools import chain

res = {v: k for k, v in enumerate(set(chain.from_iterable(df['ingredients'])))}

print(res)

{'aap': 15,
 'app': 3,
 'bootstrapping': 1,
 ...
 'ponda': 0,
 'secure': 17,
 'upi': 5}
0 голосов
/ 30 июня 2018

Вы можете получить ответ @ jpp с другим вкладышем (работает и для информационных кадров):

import pandas as pd
from collections import Counter
s = pd.Series([['apple', 'orange', 'raspberry'],
               ['apple', 'cucumber', 'strawberry', 'orange']])
s.apply(Counter).sum()

Counter({'apple': 2,
     'cucumber': 1,
     'orange': 2,
     'raspberry': 1,
     'strawberry': 1})

Если вы используете

list(s.apply(Counter).sum().keys())

вы получите именно тот ответ @ Abhishek, который, на мой взгляд, более читабелен. Применение set не будет работать, так как + не определено для наборов

0 голосов
/ 29 июня 2018

Это как ваши данные!

import pandas as pd
df = pd.DataFrame([[['kubernetes', 'client', 'bootstrapping', 'ponda']], [['micro', 'insu']], [['motor', 'upi']],[['secure', 'app', 'installation']],[['health', 'insu', 'express', 'credit', 'customer']],[['secure', 'app', 'installation']],[['aap', 'insta']],[['loan', 'house', 'loan', 'customers']]])

df.columns = ['ingredients']

print(df)

Выход:

                                 ingredients
0  [kubernetes, client, bootstrapping, ponda]
1                               [micro, insu]
2                                [motor, upi]
3                 [secure, app, installation]
4   [health, insu, express, credit, customer]
5                 [secure, app, installation]
6                                [aap, insta]
7              [loan, house, loan, customers]

Вот код для вывода списка уникальных слов.

for i in df.index:

    df.at[i, 'string'] = " ".join(item for item in df.at[i, 'ingredients'])

df.drop(['ingredients'], axis = 1, inplace = True)

from sklearn.feature_extraction.text import CountVectorizer

countvec = CountVectorizer()

counts = countvec.fit_transform(df['string'])

vocab = pd.DataFrame(counts.toarray())
vocab.columns = countvec.get_feature_names()

print(list(vocab.columns))

Придает

['aap', 'app', 'bootstrapping', 'client', 'credit', 'customer', 'customers', 'express', 'health', 'house', 'insta', 'installation', 'insu', 'kubernetes', 'loan', 'micro', 'motor', 'ponda', 'secure', 'upi']

Теперь у вас есть список вашего уникального словаря. Если вы можете дать дополнительный контекст о том, как вы хотите назначить значения, я могу продолжить этот ответ.

Расширенный ответ:

wordlist = list(vocab.columns)


worddict = {}

for i in range(0, len(wordlist)):

    worddict[wordlist[i]] = i

print(worddict)
...