You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 22:17:40