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
相关产品推荐
相关产品推荐

