Source code for neurokit2.eeg.mne_to_df
# -*- coding: utf-8 -*-
import numpy as np
import pandas as pd
[docs]
def mne_to_df(eeg):
"""**Conversion from MNE to dataframes**
Convert MNE objects to dataframe or dict of dataframes.
Parameters
----------
eeg : Union[mne.io.Raw, mne.Epochs]
Raw or Epochs M/EEG data from MNE.
See Also
--------
.mne_to_dict
Returns
----------
DataFrame
A DataFrame containing all epochs identifiable by the ``"Epoch"`` column, which time axis
is stored in the ``"Time"`` column.
Examples
---------
**Raw objects**
.. ipython:: python
import neurokit2 as nk
# Download MNE Raw object
eeg = nk.mne_data("filt-0-40_raw")
nk.mne_to_df(eeg)
**Epoch objects**
.. ipython:: python
# Download MNE Epochs object
eeg = nk.mne_data("epochs")
nk.mne_to_df(eeg)
**Evoked objects**
.. ipython:: python
# Download MNE Evoked object
eeg = nk.mne_data("evoked")
nk.mne_to_df(eeg)
"""
return _mne_convert(eeg, to_what="df")
# Dict
[docs]
def mne_to_dict(eeg):
"""**Convert MNE Raw or Epochs object to a dictionary**
Parameters
----------
eeg : Union[mne.io.Raw, mne.Epochs]
Raw or Epochs M/EEG data from MNE.
See Also
--------
mne_to_df
Returns
----------
dict
A dict containing all epochs identifiable by the 'Epoch' column, which time axis
is stored in the 'Time' column.
Examples
---------
.. ipython:: python
import neurokit2 as nk
import mne
# Raw objects
eeg = nk.mne_data("filt-0-40_raw")
eeg_dict = nk.mne_to_dict(eeg)
# Print function result summary
eeg_dict_view = {k: f"Signal with length: {len(v)}" for k, v in eeg_dict.items()}
eeg_dict_view
# Epochs objects
eeg = nk.mne_data("epochs")
eeg_epoch_dict = nk.mne_to_dict(eeg)
# Print function result summary
list(eeg_epoch_dict.items())[:2]
# Evoked objects
eeg = nk.mne_data("evoked")
eeg_evoked_dict = nk.mne_to_dict(eeg)
# Print function result summary
eeg_evoked_dict
"""
return _mne_convert(eeg, to_what="dict")
# =============================================================================
# Main function
# =============================================================================
def _mne_convert(eeg, to_what="df"):
# Try loading mne
try:
import mne
except ImportError as e:
raise ImportError(
"NeuroKit error: eeg_add_channel(): the 'mne' module is required for this function to run. ",
"Please install it first (`pip install mne`).",
) from e
old_verbosity_level = mne.set_log_level(verbose="WARNING", return_old_level=True)
# If raw object
if isinstance(eeg, (mne.io.Raw, mne.io.RawArray)):
data = eeg.to_data_frame(time_format=None)
data = data.rename(columns={"time": "Time"})
if to_what == "dict":
data = data.to_dict(orient="list")
# If epoch object
elif isinstance(eeg, mne.Epochs):
data = eeg.to_data_frame(time_format=None)
data = data.rename(columns={"time": "Time", "condition": "Condition", "epoch": "Epoch"})
if to_what == "dict":
out = {}
for epoch in data["Epoch"].unique():
out[epoch] = data[data["Epoch"] == epoch]
data = out
# If dataframe, skip and return
elif isinstance(eeg, pd.DataFrame):
data = eeg
if to_what == "dict":
data = data.to_dict(orient="list")
# If dataframe, skip and return
elif isinstance(eeg, np.ndarray):
data = pd.DataFrame(eeg)
if to_what == "dict":
data = data.to_dict(orient="list")
# it might be an evoked object
else:
dfs = []
for i, evoked in enumerate(eeg):
data = evoked.to_data_frame(time_format=None)
data = data.rename(columns={"time": "Time"})
data.insert(1, "Condition", evoked.comment)
dfs.append(data)
data = pd.concat(dfs, axis=0)
if to_what == "dict":
out = {}
for condition in data["Condition"].unique():
out[condition] = data[data["Condition"] == condition]
data = out
mne.set_log_level(old_verbosity_level)
return data