如何使用Pandas统计USAS语义标签按指定前缀规则的出现次数
代码修改方案
补全缺失的依赖导入,再新增标签截断逻辑即可,修改后的完整代码如下:
import re import os # 原代码遗漏了os模块导入,调用os.stat必须引入 import pandas as pd import pandas.io.common from pprint import pprint import glob # 定义标签格式化函数,按照需求截断标签 def format_sem_tag(tag): tag_str = str(tag) # 按小数点分割,最多切2次,得到最多3个片段 parts = tag_str.split('.', 2) # 如果分割后至少有2个片段,说明存在小数点,取前2个拼接即可 if len(parts) >= 2: return f"{parts[0]}.{parts[1]}" # 没有小数点的标签直接返回原始值 return tag_str files = glob.glob("/[folder name]/**/*.txt", recursive = True) files = list(filter(lambda file: os.stat(file).st_size > 0, files)) for file in files: data = pd.read_csv(file, engine='python', encoding='utf-8', on_bad_lines='skip', header=None, usecols=[1], sep=' ') # 先对标签列做格式化处理 data['formatted_tag'] = data[1].apply(format_sem_tag) # 统计格式化后的标签出现次数并导出 data['formatted_tag'].value_counts().reset_index().to_csv(f"{file}_totals.txt", index=False, encoding='utf-8')
核心修改说明
- 补充了
os模块导入,解决原代码调用os.stat会报错的问题 - 新增
format_sem_tag函数,通过分割小数点的方式提取标签中第一个小数点及前后的有效部分,完全匹配你给出的聚合规则要求 - 把原代码里的
error_bad_lines替换为on_bad_lines='skip',适配更高版本Pandas的API规范 - 统计前先对原始标签做格式化,再计数导出,结果符合需求
内容的提问来源于stack exchange,提问作者Denis Owa
相关产品推荐
相关产品推荐

