You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 17:03:18