如何将MNE Info对象转换为Pandas DataFrame?
将MNE的Info对象转换为Pandas DataFrame的方法
MNE的Info对象包含了EEG数据的元信息(通道详情、采样率、测量参数等),要把它转成Pandas DataFrame用于Streamlit可视化,核心是提取对象里的结构化数据字段,以下是具体实现方法:
1. 提取核心通道信息
Info对象的chs属性是一个字典列表,每个字典对应一个通道的详细参数,直接将其转换为DataFrame即可:
import mne import pandas as pd import streamlit as st # 加载EDF文件并获取Info对象 raw = mne.io.read_raw_edf("your_eeg_data.edf", preload=True) info = raw.info # 直接转换通道列表为DataFrame chs_df = pd.DataFrame(info["chs"])
2. 简化DataFrame(适配Streamlit展示)
原始的chs字段包含很多嵌套数据(比如数组、元组类型的loc、cal字段),如果只需要常用信息,可以提取关键字段生成简化版DataFrame:
# 提取通道名称、类型、单位等核心字段 simplified_chs_df = pd.DataFrame({ "通道名称": [ch["ch_name"] for ch in info["chs"]], "通道类型": [mne.io.constants.FIFF.FIFFV_CH_NAMES.get(ch["kind"], "未知") for ch in info["chs"]], "单位": [ch["unit"] for ch in info["chs"]], "采样率(Hz)": [info["sfreq"]] * len(info["chs"]) }) # 在Streamlit中展示表格 st.subheader("EEG通道核心信息") st.dataframe(simplified_chs_df, use_container_width=True)
3. 提取全局测量信息
如果需要展示采样率、通道总数、测量日期等全局信息,可以单独提取生成DataFrame:
global_info = { "测量日期": [info["meas_date"]], "采样率(Hz)": [info["sfreq"]], "通道总数": [info["nchan"]], "标记的坏通道": [", ".join(info["bads"]) if info["bads"] else "无"] } global_info_df = pd.DataFrame(global_info) # 在Streamlit中展示 st.subheader("全局测量参数") st.dataframe(global_info_df, use_container_width=True)
注意事项
- 如果需要
Info对象中的其他字段(比如dev_head_t设备头变换、subject_info受试者信息),可以参照上述方式提取对应字段转换为DataFrame。 - 嵌套类型的字段(如字典、数组)可以根据需求进一步拆解,比如将
subject_info中的姓名、年龄单独提取为列。
内容的提问来源于stack exchange,提问作者mnsosa
相关产品推荐
相关产品推荐

