«Ни один из [Float64Index ([nan, nan], dtype = 'float64')] не входит в [индекс]», значение параметра столбца A, если столбец B содержит строку - PullRequest
0 голосов
/ 28 мая 2020

У меня есть фрейм данных (называемый corpus) с одним столбцом (tweet) и 2 строками:

['check, tihs, out, this, bear, love, jumping, on, this, plant']
['i, can, t, bear, the, noise, from, that, power, plant, it, make, me, jump']

У меня есть список (называемый vocab) уникальных слов в столбце :

['check',
 'tihs',
 'out',
 'this',
 'bear',
 'love',
 'jumping',
 'on',
 'plant',
 'i',
 'can',
 't',
 'the',
 'noise',
 'from',
 'that',
 'power',
 'it',
 'make',
 'me',
 'jump']

Я хочу добавить новый столбец для каждого слова в словаре. Я хочу, чтобы все значения для новых столбцов были равны нулю, за исключением случаев, когда tweet содержит слово, и в этом случае я хочу, чтобы значение столбца слова было 1.

Поэтому я попытался запустить код ниже:

for word in vocab:
    corpus[word] = 0
    corpus.loc[corpus["tweet"].str.contains(word), word] = 1

... и была отображена следующая ошибка:

"None of [Float64Index([nan, nan], dtype='float64')] are in the [index]"

Как я могу проверить, содержит ли твит слово, а затем, если да, установите значение нового столбца для слова до 1?

Ответы [ 2 ]

1 голос
/ 28 мая 2020

Ваш corpus['tweet'] - тип списка, каждый - скелет. Так что .str.contains вернет NaN. Вы можете сделать:

# turn tweets into strings
corpus["tweet"] = [x[0] for x in corpus['tweet']]

# one-hot-encode
for word in vocab:
    corpus[word] = 0
    corpus.loc[corpus["tweet"].str.contains(word), word] = 1

Но тогда это может быть не то, что вы хотите, потому что contains будет искать все подстроки, например, this girl goes to school вернет 1 в обоих столбцах is и this.

Исходя из ваших данных, вы можете сделать:

corpus["tweet"] = [x[0] for x in corpus['tweet']]

corpus = corpus.join(corpus['tweet'].str.get_dummies(', ')
                         .reindex(vocab, axis=1, fill_value=0)
                    )
0 голосов
/ 28 мая 2020

Это будет:

from sklearn.feature_extraction.text import CountVectorizer

l = ['check, this, out, this, bear, love, jumping, on, this, plant',
'i, can, t, bear, the, noise, from, that, power, plant, it, make, me, jump']
vect = CountVectorizer()
X = pd.DataFrame(vect.fit_transform(l).toarray())
X.columns = vect.get_feature_names()

Вывод:

bear  can  check  from  it  jump  ...  out  plant  power  that  the  this
0     1    0      1     0   0     0  ...    1      1      0     0    0     3
1     1    1      0     1   1     1  ...    0      1      1     1    1     0
...