如何用Python按特征条件快速统计Excel记录数量?
实现Excel批量筛选统计的Python技术方案
核心必学技术点
- Pandas 核心数据操作:这是搞定这类表格任务的核心,重点掌握:
- 表格读写:用
pd.read_excel()读取待统计记录和条件列表,转成DataFrame格式;用pd.to_excel()输出最终计数结果。 - 字符串列布尔索引:针对字符串列直接用
df['列名'] == '目标值'生成布尔筛选数组,多条件组合用&(逻辑与)、|(逻辑或),注意用括号给条件分组。 - 批量条件遍历:把条件列表解析为字典列表(每个字典对应一组筛选规则,键是列名,值是目标值),循环遍历每组条件动态构建筛选逻辑。
- 计数统计:通过
df[筛选条件].shape[0]或df[筛选条件].count()快速获取符合条件的记录数。
- 表格读写:用
- 条件解析与格式统一:
- 提前对原始记录的字符串列做清洗:用
str.strip()去空格、str.lower()统一大小写,避免因格式差异导致筛选漏判。 - 若条件列表是结构化Excel,直接按行读取并转换为
{'列名': '筛选值'}的字典格式,方便后续批量处理。
- 提前对原始记录的字符串列做清洗:用
- 性能优化小技巧:
- 读取文件时用
usecols参数指定仅需处理的列,减少内存占用、提升速度。 - 当条件数量较多时,改用
df.query()方法,将筛选条件转为字符串表达式(如df.query("blooded == 'cold' andarms/legs== 'none'")),执行效率更高。
- 读取文件时用
实操示例流程
1. 读取数据文件
import pandas as pd # 读取10万条记录的Excel文件 records_df = pd.read_excel('animal_records.xlsx') # 读取筛选条件列表(假设表格含:编号、特征1、值1、特征2、值2、标注列) conditions_df = pd.read_excel('filter_rules.xlsx')
2. 单组条件筛选统计示例
# 对应蛇类的筛选条件字典 snake_condition = { 'blooded': 'cold', 'arms/legs': 'none', 'breathing-mechanism': 'lungs' } # 构建筛选掩码 filter_mask = pd.Series([True] * len(records_df)) for col, target_val in snake_condition.items(): # 逐步叠加条件 filter_mask &= (records_df[col] == target_val) # 统计符合条件的记录数 snake_count = records_df[filter_mask].shape[0]
3. 批量处理所有筛选条件
result_list = [] # 遍历每一组筛选条件 for _, cond_row in conditions_df.iterrows(): # 解析当前行的筛选规则 current_cond = {} # 假设从第2列开始,奇数列是特征名,偶数列是对应值 for i in range(1, len(cond_row), 2): feature = cond_row[i] val = cond_row[i+1] # 跳过空值条件 if pd.notna(feature) and pd.notna(val): current_cond[feature] = val # 构建筛选掩码 mask = pd.Series([True] * len(records_df)) for col, val in current_cond.items(): mask &= (records_df[col] == val) # 记录结果:编号、计数、标注 result_list.append({ '编号': cond_row['编号'], '计数': records_df[mask].shape[0], '标注': cond_row.get('标注', '') }) # 将结果转为DataFrame并输出到Excel result_df = pd.DataFrame(result_list) result_df.to_excel('count_results.xlsx', index=False)
内容的提问来源于stack exchange,提问作者Nicholas White
相关产品推荐
相关产品推荐

