python - Pandas .at 不工作并且数据框没有改变
问题描述
有大量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
逐行迭代 throw 并将每一行属于给定主题的概率放到其对应的列中。所以,首先我创建 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]
解决方案
使用以下帖子中的说明,我能够解决它:
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]
推荐阅读
- json - 如何在 httpie 中发送包含引号的 POST 请求?
- scheme - 检查 K 组合器的绑定变量失败
- sql - 如何在数据库项目中的部署后脚本和部署前脚本之间共享项目版本号
- java - SpringBoot 日志记录 - 每个日志语句中的堆栈跟踪
- java - 没有出现通知 - 如何解决?
- javascript - 将自定义脚本添加到 Shopify Liquid 部分
- scala - 我们如何映射/折叠 Option[String]?
- halide - Halide 索引是行主要、列主要还是混合索引?
- visual-studio - 在 Visual Studio 中隐藏“底部面板”的快捷键;无论工具窗口的数量如何
- excel - 使用列值作为类别转换 Excel 表