Pandas и NLTK: заменить пустые ячейки подстрокой смежного столбца, если подстрока содержится в токенах NLTK. - PullRequest
1 голос
/ 02 мая 2020

У меня есть таблица, состоящая из ИМЯ ПРОДУКТА и МАКЕРА. Некоторые ячейки производителя пустые, поэтому я хочу написать код для замены пустых ячеек в столбце создателя подстрокой в ​​названиях продуктов. вот таблица для информации:

enter image description here

Чтобы определить подстроки, которые я хочу использовать, я использую библиотеку NLTK.

вот код, который я написал до сих пор:

import pandas as pd
import nltk
from nltk.probability import FreqDist
import pandas as pd
import numpy as np


a=('Nokia 3518','Nokia 3313','Samsung S9','Samsung S10','Samsung S4')
b=('Nokia','','','Samsung','')

df=pd.DataFrame({'Product Name':(a) , 'Maker':(b)})
df.replace('', np.nan, inplace=True)


result = [' '.join([row for row in df['Product Name']])]

result=str(result).replace("'",'')

tokens = nltk.word_tokenize(result)
#iam taking only words greater than 4 letters

longwords= [wrd for wrd in tokens if len(wrd)>4] #Words containing 3 letters or less will be 
removed

print(longwords)

#keeping words only that occur more than once and putting it in a dataframe
fdist = FreqDist(longwords)
x=list(filter(lambda x: x[1]>1,fdist.items())) 
print(x)

# putting the tokens in a dataframe (Nokia and Samsung)
dfb=pd.DataFrame(x)

print(dfb[0])

Пока я написал код для генерации токенов, но я не уверен, как двигаться дальше.

в конечном счете, я хотите добавить фрейм данных следующим образом, разрешив коду сопоставлять подстроки в имени продукта с элементами в фрейме данных токенов (dfb) и добавляя соответствующий столбец создателя:

enter image description here

1 Ответ

0 голосов
/ 03 мая 2020

Это самый простой ответ, который я нашел, чтобы добавить к исходному коду ::

z=[]
for i in df['Product Name']:
    for j in dfb[0]:
        if j in i:
            z.append(j)

df['Maker']=z

print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...