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

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_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:15:03