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

Python遍历文件夹处理CSV重采样保存报语法错误求解

错误原因分析
  • 路径语法错误:Windows路径中的反斜杠\在Python普通字符串中是转义字符,路径片段\Users会被识别为非法Unicode转义开头,直接触发语法报错。
  • 缺失库导入:代码全程使用pandas接口(别名pd),但未编写pandas导入语句,运行时会触发名称错误。
  • 文件读取路径错误:os.listdir()仅返回目标目录下的文件名,不包含父级路径,直接传入pd.read_csv()会让Python在脚本当前运行目录查找文件,触发文件不存在错误。
  • 空值填充逻辑错误:fillna()的method参数不支持'nearest'取值,当前写法会把所有空值替换为字符串"nearest",完全不符合最近值填充的预期。
  • 输出文件名逻辑错误:直接拼接字符串会生成类似test.csvfixed.csv的异常文件名,命名不符合常规规则。
  • 冗余代码:将Date-Time列转换为时间类型并设为索引后,重复对索引执行时间类型转换无实际作用。
修正后可运行代码
import os
import fnmatch
import pandas as pd

# 路径前加r声明为原始字符串,不解析转义字符;末尾不要加反斜杠避免转义引号
target_dir = r'C:\Users\AZERTY\Desktop\1.1 pandas.zip\2021'
for file in os.listdir(target_dir):
    if fnmatch.fnmatch(file, '*.csv'):
        # 拼接完整文件读取路径
        file_path = os.path.join(target_dir, file)
        mydata = pd.read_csv(file_path)
        mydata.columns = ["Date-Time", "Frequency"]
        mydata['Date-Time'] = pd.to_datetime(mydata['Date-Time'])
        mydata = mydata.set_index('Date-Time')
        # 按1秒间隔重采样取均值
        df = mydata.resample('1S').mean()
        # 用最近邻插值填充空值
        df = df.interpolate(method='nearest')
        # 拆分原文件名生成规范新文件名
        file_name, file_ext = os.path.splitext(file)
        save_path = os.path.join(target_dir, f"{file_name}_fixed{file_ext}")
        df.to_csv(save_path)
修正点说明
  • 路径字符串前加r声明为原始字符串,Python不会解析其中的转义字符,从根源解决路径语法报错问题。
  • 补充import pandas as pd导入语句,保证pandas接口可正常调用。
  • 用os.path.join()拼接父目录和文件名,生成完整的读取、保存路径,适配不同操作系统的路径分隔符规则,避免文件找不到的问题。
  • 将错误的fillna('nearest')替换为interpolate(method='nearest'),实现真正的最近邻值填充逻辑。
  • 用os.path.splitext()拆分原文件名和后缀,生成原文件名_fixed.csv格式的规范输出文件名。
  • 删除重复的时间类型转换代码,精简执行逻辑。
  • 细节提示:如果重采样时触发类型错误,先检查Frequency列是否为数值类型,非数值可先用pd.to_numeric(mydata['Frequency'])做类型转换。

内容的提问来源于stack exchange,提问作者M R

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:01:17