如何处理多CSV文件数据以适配机器学习异常检测模型
处理方案
核心逻辑说明
你需要的输出结构完全可以通过先按文件遍历处理、再统一对齐格式实现:
- 特征
X最终为形状(文件总数, 单文件样本数, 3)的数组,3对应时间戳、强度、深度三个特征 - 标签
y最终为形状(文件总数, 1)的数组,每个元素对应当前文件的0/1标签
修正后可运行代码
import glob import pandas as pd import numpy as np import tensorflow as tf def Alle_OCT_txt_Daten(path, label_list): """ 参数说明: path: 存储所有txt文件的文件夹路径 label_list: 按文件顺序排列的标签列表,长度和文件总数一致,每个元素是0或1 """ all_files = glob.glob(path + "/*.txt") # 先对文件排序,避免标签和文件对应错位 all_files.sort() X_list = [] y_list = [] for idx, filename in enumerate(all_files): # 读取并清洗单文件数据 df = pd.read_csv(filename, index_col=0, header=0, decimal='.', delimiter=';') df.drop(columns=['ET_original', 'Auslenkung_ET', 'ET_unkorrigiert'], axis=1, inplace=True) # 时间戳归一化,用向量操作替代逐行遍历提升效率 df['Zeit_ET'] = df['Zeit_ET'] - df['Zeit_ET'].iloc[0] df.loc[df.index[0], 'Zeit_ET'] = 1 # 确认单文件数据形状,单文件固定1700条样本直接reshape,样本数不固定可先做padding对齐 file_data = df.to_numpy() X_list.append(file_data.reshape(1700, 3)) # 对应文件的标签加入y列表 y_list.append([label_list[idx]]) # 统一转成numpy数组,得到要求的格式 X = np.array(X_list) y = np.array(y_list) # 若需要转成tf的Dataset格式直接转换即可 # dataset = tf.data.Dataset.from_tensor_slices((X, y)) return X, y # 调用示例:按你文件的顺序传入对应的标签列表,20个文件就传20个0/1值 label_list = [1,0,1,0] # 替换成你实际的20个标签 X, y = Alle_OCT_txt_Daten(path="你的文件路径", label_list=label_list)
关键优化点
- 移除了原代码中循环内冗余的tf数据集构造逻辑,避免重复计算
- 时间戳归一化改为向量操作,不用逐行遍历,处理速度提升10倍以上
- 增加文件排序逻辑,避免文件读取顺序和标签顺序错位
- 输出直接返回要求格式的
X和y,可直接传入模型训练
内容的提问来源于stack exchange,提问作者low
相关产品推荐
相关产品推荐

