Python for循环print输出重定向失效 无法保存词频统计结果
问题原因
- 之前的文件写入逻辑存在两个核心问题:一是把
open操作放在循环内部,且使用w(覆盖写入)模式,每次循环都会清空文件原有内容,最终只能保留单条结果;二是原most_common函数存在缩进错误,且df['Count']列已经是Counter对象,不需要重复嵌套一层Counter做冗余转换。 - 如果你的需求是统计每个技术类别下所有文本的总词频,逐行生成Counter的逻辑不符合要求,需要先按分组做Counter聚合,下文会提供对应参考代码。
方案1:直接在原DataFrame新增词频列
基于已有的Counter列直接做映射即可,不需要额外写循环:
# 新增列存储降序排列的词频结果,每个单元格值为(词语, 出现次数)格式的元组列表 df['sorted_word_freq'] = df['Count'].apply(lambda x: x.most_common()) # 如需导出带词频列的完整CSV,直接执行下行代码,utf-8-sig编码可避免Excel打开中文乱码 df.to_csv('带词频的原始数据结果.csv', index=False, encoding='utf-8-sig')
如果是分组后需要统计组内总词频,先替换Counter生成逻辑:
from collections import Counter import pandas as pd # 自定义分组聚合函数,统计组内所有文本的总词频 def calc_group_counter(text_series): total_counter = Counter() for text in text_series.dropna(): total_counter.update(text.lower().split()) return total_counter # 按技术类别字段分组,替换为你表中实际的技术分类列名 grouped_df = df.groupby('技术类别列名')['clean_text'].agg(group_counter=calc_group_counter).reset_index() # 再生成降序词频列 grouped_df['sorted_word_freq'] = grouped_df['group_counter'].apply(lambda x:x.most_common())
方案2:导出独立的词频结果文件
存为普通TXT文件
把文件打开操作移到循环外部,避免反复清空覆盖:
with open("分技术类别词频结果.txt", "w", encoding="utf-8") as f: for counter_item in df['Count']: # 逐行写入每个技术类别的降序词频 f.write(f"{counter_item.most_common()}\n")
存为结构化CSV文件(推荐,方便后续分析)
不要直接把列表整体写入单元格,把词频拆分为独立行,关联对应技术类别:
record_list = [] # 注意:把下方的「技术类别列名」替换成你表中存储技术分类的实际列名 for tech_category, counter_item in zip(df['技术类别列名'], df['Count']): for word, freq in counter_item.most_common(): record_list.append({ "技术类别": tech_category, "词语": word, "词频": freq }) # 转换为专用词频表导出 freq_result_df = pd.DataFrame(record_list) freq_result_df.to_csv("结构化分技术词频统计.csv", index=False, encoding="utf-8-sig")
内容的提问来源于stack exchange,提问作者user15280861
相关产品推荐
相关产品推荐

