如何统计CSV文件中每10行内true值的出现次数并修正现有代码?
问题解决:CSV文件每10行布尔值统计
需求说明
需要对CSV文件中布尔值列(true/false)按每10行统计true的出现次数。现有代码读取指定文件夹下的CSV文件,选取t和f列后添加统计列,但使用.sum方法未实现预期效果。
现有代码问题分析
.sum未加括号,实际是引用方法对象而非执行求和计算- 当前代码是计算整列的布尔值总和,而非每10行滑动窗口内的统计
修正后的代码
import pandas as pd import numpy as np import glob import os all_files = glob.glob("C:/Users/Gamer/Documents/Colbun/Saturn/*.csv") for f in all_files: df = pd.read_csv(f, header=0, usecols=["t","f"]) # 直接生成布尔判断列,比apply更高效 df['f<49.975'] = df['f'] < 49.975 df['f>50.025'] = df['f'] > 50.025 # 按每10行窗口统计true的出现次数,min_periods=1确保不足10行时也能计算 df['f<49.975_10row_count'] = df['f<49.975'].rolling(window=10, min_periods=1).sum().astype(int) df['f>50.025_10row_count'] = df['f>50.025'].rolling(window=10, min_periods=1).sum().astype(int) # 输出处理后的文件 output_filename = f'{os.path.basename(f).split(".")[0]}_ext.csv' output_path = f'C:/Users/Gamer/Documents/Colbun/Saturn2/{output_filename}' df.to_csv(output_path, index=False)
代码说明
- 用列直接运算生成布尔列,替代低效的
apply方法 rolling(window=10)创建10行滑动窗口,sum()自动将True视为1、False视为0,统计窗口内true的数量min_periods=1保证文件开头不足10行的部分也能正常统计astype(int)将浮点型求和结果转为整数,符合计数的直观需求
内容的提问来源于stack exchange,提问作者Isaac Rojas Oyarzun
相关产品推荐
相关产品推荐

