如何使用pandas对多个文本文件重复执行DataFrame处理流程
问题根因
1. 无输出文件的原因
循环代码中遗漏了单文件处理逻辑里的df.to_csv()导出步骤,自然不会生成对应结果文件。
2. DataFrame转为字符串类型的原因
- 路径读取错误:
glob.glob返回的是带目标目录前缀的完整文件路径,你用os.path.split(file)[1]仅提取了纯文件名,若Python运行时的工作目录和你指定的path目录不一致,pd.read_csv要么找不到文件报错,要么误读了当前工作目录下同名但格式不同的txt文件,导致数值无法正常解析,被识别为字符串类型。 - 部分文件格式异常:如果待处理的多个文件中,存在部分文件跳过22行后的数据包含非数值字符(比如异常符号、空值标记和测试用的单文件不一致),pandas无法自动解析为浮点型,会默认转为object(字符串)类型存储。
修复后可直接运行的代码
import pandas as pd import glob import os # 提前定义表头,不要放在循环内重复生成 header_list = ["energy","mufluor","io","ifluor_DT","ifluor_raw","counttime","itrans","irefer"] # 替换为你实际存放txt文件的目录路径 path = "你的目标文件目录" all_files = glob.glob(os.path.join(path, "*.txt")) for file in all_files: # 直接用完整路径读取文件,避免工作目录不一致导致的读取错误 df = pd.read_csv( file, sep='\s+', skiprows=22, header=None, names=header_list, # 强制指定数值类型,遇到解析错误直接报错,方便定位异常文件 dtype=float ) df['offset'] = df.iloc[0,1] df['offset_removed'] = df['mufluor'] - df['offset'] # 生成输出文件路径,和原文件同目录,文件名加_2后缀 file_dir, file_name = os.path.split(file) name_main, ext = os.path.splitext(file_name) output_path = os.path.join(file_dir, f"{name_main}_2{ext}") # 导出处理结果 df.to_csv(output_path, index=None, sep=' ', mode='a')
异常排查提示
如果运行时报类型转换错误,说明对应文件内确实存在非数值内容,可以在循环内打印当前处理的file路径,定位异常文件后手动核对内容格式是否和测试用单文件一致。
内容的提问来源于stack exchange,提问作者Anne
相关产品推荐
相关产品推荐

