Pandas .at не работает и датафрейм не меняется - PullRequest
0 голосов
/ 03 декабря 2018

Имея большой DataFrame текст, я хочу сначала обучить и модель LDA на нем.Итак, я делаю:

doc_clean = df['tweet_tokenized'].tolist()
dictionary = corpora.Dictionary(doc_clean)
doc_term_matrix = [dictionary.doc2bow(doc) for doc in doc_clean]
lda = LdaMulticore(doc_term_matrix, id2word=dictionary, num_topics=50)

Теперь, когда у меня есть обученный lda, я хочу перебрасывать df строку за строкой и помещать вероятность каждой строки, принадлежащей данной теме, в соответствующий столбец.,Итак, сначала я создаю 50 столбцов с нулями:

for i in range(50):
    col_name = 'tweet_topic_'+str(i)
    df[col_name] = 0

Затем я перебираю строки, используя iterrows(), и обновляю значения, используя метод at:

for row_index, row in df.iterrows():
    new_doc = dictionary.doc2bow(row['tweet_tokenized'])
    lda_result = lda[new_doc]
    for topic in lda_result:
        col_name = 'tweet_topic_'+(str(topic[0]))
        df.at[row_index,col_name] = topic[1]

Ноон не работает должным образом, а значения вышеприведенных 50 столбцов не меняются и остаются нулями.

Есть идеи, как мне решить эту проблему?

ОБНОВЛЕНИЕ: Я добавил row = row.copy() изаменил at на loc и теперь он работает хорошо.

Итак, вот рабочий код:

for row_index, row in df.iterrows():
    row = row.copy()
    new_doc = dictionary.doc2bow(row['tweet_tokenized'])
    lda_result = lda[new_doc]
    for topic in lda_result:
        col_name = 'tweet_topic_'+(str(topic[0]))
        df.loc[row_index,col_name] = topic[1]

1 Ответ

0 голосов
/ 04 декабря 2018

Используя инструкции в следующем посте, я смог ее решить:

Обновление значения в iterrow для панд

for row_index, row in df.iterrows():
    row = row.copy()
    new_doc = dictionary.doc2bow(row['tweet_tokenized'])
    lda_result = lda[new_doc]
    for topic in lda_result:
        col_name = 'tweet_topic_'+(str(topic[0]))
        df.loc[row_index,col_name] = topic[1]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...