Замена определенных значений в столбце данных - PullRequest
0 голосов
/ 02 ноября 2018

Я выполняю следующий код в блокноте jupyter, который проверяет строки текста в nametest_df['text'] и возвращает имена людей. Мне удалось заставить это работать, и я хотел бы отправить эти имена в соответствующие поля в nametest_df['name'], где в настоящее время все значения NaN.

Я попробовал метод Series.replace(), однако все записи в столбце «имя» имеют одинаковое имя.

Любая подсказка, как я могу сделать это эффективно?

for word in nametest_df['text']:

    for sent in nltk.sent_tokenize(word):
        tokens = nltk.tokenize.word_tokenize(sent)
        tags = st.tag(tokens)

        for tag in tags:
            if tag[1]=='PERSON':
                name = tag[0]
                print(name)

    nametest_df.name = nametest_df.name.replace({"NaN": name})

Образец nametest_df

      **text**                    **name**
0   His name is John                NaN
1   I went to the beach             NaN
2   My friend is called Fred        NaN

Ожидаемый результат

      **text**                    **name**
0   His name is John                John                
1   I went to the beach             NaN
2   My friend is called Fred        Fred      

1 Ответ

0 голосов
/ 02 ноября 2018

Не пытайтесь заполнять серийные значения одно за другим. Это неэффективно, подвержено ошибкам. Лучше создать список имен и назначить их напрямую.

L = []
for word in nametest_df['text']:
    for sent in nltk.sent_tokenize(word):
        tokens = nltk.tokenize.word_tokenize(sent)
        tags = st.tag(tokens)
        for tag in tags:
            if tag[1]=='PERSON':
                L.append(tag[0])

nametest_df.loc[nametest_df['name'].isnull(), 'name'] = L
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...