переназначить строковые значения в списке в серии - PullRequest
2 голосов
/ 28 марта 2019

Я пытаюсь переназначить значения списка, который находится в ряду, на новые строковые значения. Тем не менее, я не могу понять, как это сделать. В настоящее время я создаю новый список и добавляю новые слова, но это просто объединяет все слова из всего списка в список ns. Где я хочу просто обновить текущий список новыми элементами.

words = data.String.apply(lambda x: word_tokenize(x))
ns =[]
#print(words)
for i in words:
    for j in i:
        ns.append(ps.stem(j))  

Например, words =

0    [I, loved, dogs, because, they, are, cute, and...
1    [my, dog, is, looking, at, me, weird, maybe, c...
2    [I, think, I, look, like, a, cupacake, one, wi...
3    [do, you, want, to, be, a, snowman, no, thanks...
4    [hey, do, you, know, what, time, it, is, cooking,...
5     [dogs, are, so, awesome, dogs, are, so, awesome]

после помещения его в цикл for для определения слов, words должно выглядеть следующим образом:

    0    [I, love, dog, becaus, they, are, cute, and...
    1    [my, dog, is, look, at, me, weird, maybe, c...
    2    [I, think, I, look, like, a, cupacake, one, wi...
    3    [do, you, want, to, be, a, snowman, no, thank...
    4    [hey, do, you, know, what, time, it, is, cook,...
    5     [dog, are, so, awesome, dog, are, so, awesome]

В

print(type(words))
print(type(words[1]))
print(type(words[1][1]))

Из:

<class 'pandas.core.series.Series'>
<class 'list'>
<class 'str'>

Есть мысли?

Спасибо!

Ответы [ 2 ]

1 голос
/ 28 марта 2019

Использовать понимание списка с функцией ps.stem:

print (data)
                                    String
0   I loved dogs because they are cute and
1      my dog is looking at me weird maybe
2       I think I look like a cupacake one
3    do you want to be a snowman no thanks
4  hey do you know what time it is cooking
5  dogs are so awesome dogs are so awesome

from nltk.stem.snowball import SnowballStemmer
from nltk import word_tokenize
ps = SnowballStemmer("english")

words = data.String.apply(lambda x: [ps.stem(y) for y in word_tokenize(x)])
print (words)
0      [i, love, dog, becaus, they, are, cute, and]
1          [my, dog, is, look, at, me, weird, mayb]
2        [i, think, i, look, like, a, cupacak, one]
3    [do, you, want, to, be, a, snowman, no, thank]
4    [hey, do, you, know, what, time, it, is, cook]
5      [dog, are, so, awesom, dog, are, so, awesom]
Name: String, dtype: object

При необходимости переназначить в тот же столбец:

data.String = data.String.apply(lambda x: [ps.stem(y) for y in word_tokenize(x)])
print (data)
                                           String
0    [i, love, dog, becaus, they, are, cute, and]
1        [my, dog, is, look, at, me, weird, mayb]
2      [i, think, i, look, like, a, cupacak, one]
3  [do, you, want, to, be, a, snowman, no, thank]
4  [hey, do, you, know, what, time, it, is, cook]
5    [dog, are, so, awesom, dog, are, so, awesom]

Или в новый столбец:

data['Stem'] = data.String.apply(lambda x: [ps.stem(y) for y in word_tokenize(x)])
0 голосов
/ 28 марта 2019

Если вы хотите оставить два цикла for, вам нужно использовать индексы для просмотра. В питоне при использовании for i in lst. i равно каждому элементу в списке. Чтобы изменить значение в списке, вам нужен индекс.

измените ваши циклы, чтобы вместо них использовать индексы:

for i in range(len(words)):
    for j in range(len(words[i])):
       words[i][j] = "something new"

это позволит вам изменить значение в месте [i][j] в массиве.

...