Python批量读取CSV文件并低通滤波,分存时添加表头求助
批量处理CSV文件:低通滤波后带表头单独保存
完全理解手动处理100+文件的痛苦!我帮你调整了代码,解决了之前的批量保存逻辑问题,同时实现了给结果文件添加表头的需求:
import glob import pandas as pd import numpy as np from scipy import signal import os # 确保输出目录存在,不存在则自动创建 output_dir = "Filtered_files" os.makedirs(output_dir, exist_ok=True) # 匹配目标CSV文件 files = glob.glob("Angular_position_*_*.csv") # 统一设置滤波参数 lowPassCutoffFreq = 6.0 # 截止频率 Sample_freq = 150 # 采样频率 N = 5 # 滤波器阶数(你原代码实际用了5,注释写的2,这里统一为5,可按需修改) Wn = lowPassCutoffFreq / (Sample_freq / 2) # 归一化频率 b, a = signal.butter(N, Wn, btype='low', analog=False, output='ba') for f in files: # 读取单个CSV文件 df = pd.read_csv(f) time_col = df.iloc[:, 0] data_cols = df.iloc[:, 1:] # 执行双向滤波(filtfilt避免相位偏移) filtered_data = signal.filtfilt(b, a, data_cols.to_numpy(), axis=0) # 将滤波结果转为DataFrame,添加自定义表头 filtered_df = pd.DataFrame(filtered_data, columns=['col1', 'col2', 'col3']) # 可选:把原时间列插回结果的第一列 filtered_df.insert(0, 'time', time_col) # 生成对应输出文件名:原文件名前加Filtered_前缀,存入指定目录 output_filename = os.path.join(output_dir, f"Filtered_{os.path.basename(f)}") # 保存为带表头的CSV文件 filtered_df.to_csv(output_filename, index=False) print("所有文件处理完成!")
关键改动说明:
- 目录安全处理:用
os.makedirs确保输出目录存在,避免保存时因目录不存在报错 - 逐个保存逻辑:循环内处理完单个文件后立即保存,输出文件名对应原文件的带前缀版本,保证每个结果独立存储
- 表头添加:通过
pandas.DataFrame的columns参数直接指定表头,同时可选保留原时间列 - 路径兼容性:用
os.path.join和os.path.basename处理路径,避免跨平台的路径格式问题 - 参数统一:统一了滤波器阶数的注释与实际代码,你可以根据需求把
N改回2
如果你的CSV文件列数不是3列,只需要修改columns=['col1', 'col2', 'col3']为对应数量的列名即可。
内容的提问来源于stack exchange,提问作者Marty
相关产品推荐
相关产品推荐

