使用Pandas读取TXT文件并统计唯一记录出现次数
多列唯一记录统计与Excel生成解决方案
问题背景
我有如下格式的TXT文件:
thi is a junk data line to be ignored abc xyz dsfgsrj AFKSDNG-RBI 20200706 MARS stu base-1 AFKSDNG-UBI 20200706 JUPITER uyt base-2 AFKSDNG-ABI 20200706 MARS stu base-1 AFKSDNG-XBI 20200706 JUPITER uyt base-2 AFKSDNG-XBI 20200706 MARS stx base-1该文件无表头,列间以任意数量空格分隔,需跳过第一行垃圾数据。统计规则:只要第3、4、5列中有一列不同,即视为唯一记录,比如示例中前两条
MARS+stu+base-1算重复记录,最后一条MARS+stx+base-1是新记录,因此MARS相关的唯一组出现次数为2。
需求:统计唯一记录的出现次数,去重后生成Excel文件。现有代码仅能读取导出,无法实现计数。
修正后的实现代码
统计计数+去重导出
import pandas as pd # 读取文件:处理任意多空格分隔,跳过第一行垃圾数据 df = pd.read_csv('CD202205.txt', engine='python', sep='\s+', header=None, skiprows=1) # 按第3、4、5列(对应pandas索引2、3、4)分组,统计次数并保留其他列内容 count_result = df.groupby([2, 3, 4], as_index=False).agg( 出现次数=('0', 'count'), # 用任意列计数均可 标识符=('0', 'first'), # 保留第1列的首个值 日期=('1', 'first') # 保留第2列的首个值 ) # 调整列顺序,还原原始逻辑 count_result = count_result[['标识符', '日期', 2, 3, 4, '出现次数']] # 可选:给列重命名,提升可读性 count_result.columns = ['标识符', '日期', '分组1', '分组2', '分组3', '出现次数'] # 导出到Excel count_result.to_excel('统计结果.xlsx', index=False, sheet_name='统计数据')
仅去重不计数的简化代码
如果只需要去除重复记录,不需要统计次数,可直接用:
import pandas as pd df = pd.read_csv('CD202205.txt', engine='python', sep='\s+', header=None, skiprows=1) # 按第3、4、5列去重,保留每组第一条记录 deduped_df = df.drop_duplicates(subset=[2, 3, 4], keep='first') deduped_df.to_excel('去重结果.xlsx', index=False, sheet_name='去重数据')
关键说明
- 把原代码的
sep='\s{3,}'改为sep='\s+',确保任意数量的空格都能被识别为分隔符,避免列解析错误。 groupby([2,3,4])明确指定分组依据,确保只要这三列有差异就视为不同记录,解决后续发现的分组错误问题。agg方法同时完成计数和保留其他字段,避免丢失原始数据的关键信息。
内容的提问来源于stack exchange,提问作者twww123
相关产品推荐
相关产品推荐

