Python批量提取txt空格分隔列生成指定结构DataFrame问题
修正后完整代码
def changeFolder(self): # 建议把导入语句移到文件顶部,此处保留和原代码一致的结构 import pandas as pd import numpy as np import os from PyQt5.QtWidgets import QFileDialog, QMessageBox folder = QFileDialog.getExistingDirectory(None, '选择数据文件夹', '.') if not folder: # 取消选择时直接返回 return # 存储所有txt文件的第二列数据,键为文件名,值为第二列数据数组 col_data = {} for file in os.listdir(folder): if file.endswith(".txt"): print(f"正在处理:{file}") # 拼接完整文件路径,解决os.listdir仅返回文件名无法直接读取的问题 fpath = os.path.join(folder, file) # 读取空格分隔的txt,\s+兼容多个空格分隔的场景 df_temp = pd.read_csv(fpath, sep='\s+', header=None) # 提取第二列存入字典 col_data[file] = df_temp.iloc[:, 1].values # 高效生成-50到50的lag序列,numpy.arange原生支持负值输入,左闭右开规则所以结束值设为51即可包含50 lag = np.arange(-50, 51, dtype=int) # 直接用存储好的字典生成DataFrame,自动匹配列名 df = pd.DataFrame(col_data, index=lag) # 导出csv,index=True会把lag索引也存入文件 df.to_csv(r'D:\GLaDOS-CAMPUS\data\TestData-AB\ExtractedABFiles.csv', index=True, encoding='utf-8-sig') # 成功提示 mbox = QMessageBox() mbox.setText("数据提取完成!") mbox.setStandardButtons(QMessageBox.Ok) mbox.setWindowTitle('CSV批量处理器') mbox.exec_()
关键修改说明
- 负数序列生成:
np.arange(-50, 51)完全兼容负值输入,比手写数组高效10倍以上,也不会出现数值遗漏错误 - 修复了原代码路径错误:
os.listdir仅返回文件名,必须拼接文件夹路径才能正确读取文件 - 修复了原代码遍历逻辑错误、变量重复赋值的问题,用字典存储每列数据,直接生成符合要求的DataFrame
- 新增多空格兼容的分隔符设置,适配不同格式的空格分隔txt文件
注意事项
- 如果你的txt文件自带表头,把
header=None改为header=0即可 - 如果单个txt文件的行数和101(-50到50的总长度)不一致,程序会自动填充NaN值
内容的提问来源于stack exchange,提问作者Fairbz_
相关产品推荐
相关产品推荐

