使用MNE读取BrainVision格式EEG文件遇滤波警告及数据集转换问题
解决BrainVision格式EEG转「时间戳->信号」数据集的问题
关于RuntimeWarning的说明
该警告仅提示不同通道的低通滤波参数不一致,MNE自动采用了最高的滤波值(131Hz),不会影响数据读取和后续处理。若不想看到该警告,可在代码开头添加过滤:
import warnings warnings.filterwarnings("ignore", category=RuntimeWarning, module="mne")
完整转换步骤(基于MNE)
直接使用MNE即可完成转换,无需额外工具,具体代码如下:
import mne import pandas as pd # 读取BrainVision文件(若需屏蔽警告,先执行上述过滤代码) raw = mne.io.read_raw_brainvision('base.vhdr', preload=True) # 1. 提取时间戳:raw.times为相对于数据起始点的秒级时间数组 timestamps = raw.times # 形状为(n_times,) # 若需毫秒级时间戳,可转换:timestamps = raw.times * 1000 # 2. 提取信号数据:get_data()返回(n_channels, n_times),转置后为(n_times, n_channels) signals = raw.get_data().T # 3. 合并时间戳与信号,生成结构化数据集 channel_names = raw.ch_names columns = ['timestamp'] + channel_names eeg_df = pd.DataFrame(data=signals, columns=channel_names) eeg_df.insert(0, 'timestamp', timestamps) # 4. 保存为CSV(也可保存为JSON等格式) eeg_df.to_csv('eeg_timestamp_signal.csv', index=False)
代码补充说明
raw.get_data()返回的信号默认单位为微伏(μV),可通过raw.info['units']确认具体单位- 最终生成的CSV文件每行对应一个时间戳及该时刻所有通道的信号值,完全匹配「时间戳->信号」的需求
替代方案(轻量库pybv)
若不想使用MNE,可使用专门处理BrainVision格式的轻量库pybv(通过pip install pybv安装):
from pybv import read_brainvision import pandas as pd # 读取BrainVision文件 raw_data, sfreq, ch_names, annotations = read_brainvision('base.vhdr') # 计算时间戳:基于采样频率生成 timestamps = [i / sfreq for i in range(raw_data.shape[1])] # 生成结构化数据集并保存 eeg_df = pd.DataFrame(data=raw_data.T, columns=ch_names) eeg_df.insert(0, 'timestamp', timestamps) eeg_df.to_csv('eeg_timestamp_signal.csv', index=False)
内容的提问来源于stack exchange,提问作者Andrew
相关产品推荐
相关产品推荐

