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

Python实现文本文件Top3高频与低频行统计求助

嘿,我来帮你搞定这个问题!你说用了Counter和Pandas的方法但输出全部行,大概率是在数据读取或者统计细节上没处理到位——比如每行数据藏着空格、换行符这类肉眼难察觉的差异,或者统计维度没找对。下面给你两种靠谱的解决方案,还有必看的排查要点:

方法一:用Pandas快速统计

先确保正确读取文件,再清理数据里的“隐形干扰项”,最后统计频率:

import pandas as pd

# 读取单列文本文件,假设没有表头,用header=None避免把第一行内容当成表头
df = pd.read_csv("你的文件名.txt", header=None, names=["content"])

# 关键步骤:去掉每行首尾的空白字符(空格、换行符、制表符都能清掉)
df["content"] = df["content"].str.strip()

# 统计每个内容的出现频率,默认按降序排列
frequency = df["content"].value_counts()

# 提取频率最高的3项
top3 = frequency.head(3)
# 提取频率最低的3项(用nsmallest比tail更严谨,避免相同频率的项遗漏)
bottom3 = frequency.nsmallest(3)

print("频率最高的3项:")
print(top3)
print("\n频率最低的3项:")
print(bottom3)

之前你可能踩的坑:没做空白字符清理,导致"苹果"和" 苹果 "被当成不同项,value_counts就会把它们分开,看起来像输出了全部行;或者读取时没指定header=None,把第一行内容当成表头,统计时少了关键数据。

方法二:用collections.Counter原生统计

如果不想用Pandas,用Python原生库也能搞定,同样要注意清理数据:

from collections import Counter

# 逐行读取文件,同时清理空白和过滤空行
with open("你的文件名.txt", "r", encoding="utf-8") as f:
    # 去掉每行首尾空白,并且跳过空行(避免统计空字符串)
    lines = [line.strip() for line in f if line.strip()]

# 统计每个内容的出现次数
counter = Counter(lines)

# 获取频率最高的3项
top3 = counter.most_common(3)
# 获取频率最低的3项:按次数升序排序后取前3个
bottom3 = sorted(counter.items(), key=lambda x: x[1])[:3]

print("频率最高的3项:")
for item, count in top3:
    print(f"{item}: {count}")
print("\n频率最低的3项:")
for item, count in bottom3:
    print(f"{item}: {count}")

之前用most_common失效的原因:大概率是没清理换行符或空行,导致每行都被当成唯一项,most_common自然会输出全部内容;另外如果文件编码不对,读取后出现乱码,也会让相同内容被识别为不同项。

必看排查要点
  • 检查空白字符:空格、换行符、制表符是最常见的“隐形坑”,一定要用strip()清理。
  • 过滤空行:空行如果没处理,会被统计成空字符串的项,干扰结果。
  • 确认文件编码:如果是中文或特殊编码的文件,读取时要指定encoding(比如utf-8、gbk),避免乱码导致统计错误。

内容的提问来源于stack exchange,提问作者stackuser123

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:28:34