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

如何解决Python合并AcqKnowledge文件生成空DataFrame的问题?

解决AcqKnowledge多文件通道数据合并为空DataFrame的问题

问题背景

批量读取文件夹内的AcqKnowledge文件,计划将EDA、ECG通道数据分别存入DataFrame,但运行代码后得到空DataFrame,单个文件读取逻辑却能正常工作,使用bioread库处理数据。

原代码

import pandas as pd
from bioread import read_file

# Specify the folder containing your Acq files
folder_path = r"C:\path\to\your\acq_files"

# Initialize empty lists for EDA and ECG data
eda_data = []
ecg_data = []

# Iterate through Acq files in the folder
for file_name in os.listdir(folder_path):
    if file_name.endswith(".acq"):
        file_path = os.path.join(folder_path, file_name)

        # Read the Acq file
        acq_data = read_file(file_path)

        # Extract data for EDA channel
        eda_channel_name = 'GSR - EDA100C'
        if eda_channel_name in acq_data.channels:
            eda_data.extend(acq_data[eda_channel_name].data.tolist())

        # Extract data for ECG channel
        ecg_channel_name = 'ECG - ECG100C'
        if ecg_channel_name in acq_data.channels:
            ecg_data.extend(acq_data[ecg_channel_name].data.tolist())

# Create DataFrames for EDA and ECG
df_eda = pd.DataFrame({"GSR - EDA100C": eda_data})
df_ecg = pd.DataFrame({"ECG - ECG100C": ecg_data})

# Print the first 10 rows of the EDA DataFrame
print("First 10 rows of the EDA DataFrame:")
print(df_eda.head(10))

# Print the first 10 rows of the ECG DataFrame
print("\nFirst 10 rows of the ECG DataFrame:")
print(df_ecg.head(10))

运行结果

Empty DataFrame
Columns: []
Index: []

问题排查与修复方案

核心问题1:缺少os模块导入

代码中使用了os.listdir()和os.path.join()但未导入os模块,导致文件遍历逻辑根本无法执行,eda_data和ecg_data始终为空。

其他潜在问题

  • 通道名称不匹配:需确认文件内实际通道名是否与代码中定义的'GSR - EDA100C'、'ECG - ECG100C'完全一致(包括大小写、空格、特殊符号)
  • 文件夹路径错误:确保folder_path指向的文件夹存在且包含目标.acq文件

修复后的代码

import pandas as pd
import os  # 补充os模块导入
from bioread import read_file

# 指定Acq文件所在文件夹
folder_path = r"C:\path\to\your\acq_files"

# 初始化存储EDA和ECG数据的列表
eda_data = []
ecg_data = []

# 遍历文件夹内的Acq文件
for file_name in os.listdir(folder_path):
    if file_name.endswith(".acq"):
        file_path = os.path.join(folder_path, file_name)
        print(f"正在处理文件: {file_name}")  # 调试:打印当前处理的文件名

        # 读取Acq文件
        acq_data = read_file(file_path)
        
        # 调试:打印当前文件的所有通道名,方便确认通道名称是否匹配
        print(f"文件内通道列表: {[ch.name for ch in acq_data.channels]}")

        # 提取EDA通道数据
        eda_channel_name = 'GSR - EDA100C'
        if eda_channel_name in [ch.name for ch in acq_data.channels]:
            eda_data.extend(acq_data[eda_channel_name].data.tolist())
            print(f"成功提取{eda_channel_name}通道数据")
        else:
            print(f"文件{file_name}中未找到{eda_channel_name}通道")

        # 提取ECG通道数据
        ecg_channel_name = 'ECG - ECG100C'
        if ecg_channel_name in [ch.name for ch in acq_data.channels]:
            ecg_data.extend(acq_data[ecg_channel_name].data.tolist())
            print(f"成功提取{ecg_channel_name}通道数据")
        else:
            print(f"文件{file_name}中未找到{ecg_channel_name}通道")

# 创建EDA和ECG的DataFrame
df_eda = pd.DataFrame({"GSR - EDA100C": eda_data})
df_ecg = pd.DataFrame({"ECG - ECG100C": ecg_data})

# 打印结果
print("\nEDA DataFrame前10行:")
print(df_eda.head(10))

print("\nECG DataFrame前10行:")
print(df_ecg.head(10))

修复说明

  1. 补充import os,确保文件遍历功能正常运行
  2. 添加调试打印语句,方便追踪每个文件的处理状态和通道匹配情况
  3. 调整通道存在性判断逻辑,通过[ch.name for ch in acq_data.channels]明确获取通道名称列表,避免匹配误差

内容的提问来源于stack exchange,提问作者zob

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 14:23:16