Source code for spiketimes.df.conversion

import numpy as np
import pandas as pd


[docs]def list_to_df( spiketrains: list, indexes: list = None, returned_spiketimes_label: str = "spiketimes", returned_spiketrain_label: str = "spiketrain", ): """ Convert a list of spiketrains into a tidy dataframe of spiketimes Args: spiketrains: A list of numpy-array spiketrains indexes: An optional list of labels for the of the spiketrains returned_spiketimes_label: The label of the column in the returned DataFrame containing spiketimes returned_spiketrains_label: The label of the column in the returned DataFrame containing spiketrain identifiers Returns: A pandas DataFrame containing one spike and id label per row """ if indexes is None: indexes = np.arange(len(spiketrains)) else: assert len(spiketrains) == len( indexes ), "index and spiketrains must be the same size" df_list = [ pd.DataFrame( {returned_spiketrain_label: index, returned_spiketimes_label: spiketrain} ) for index, spiketrain in zip(indexes, spiketrains) ] return pd.concat(df_list)
[docs]def list_of_dicts_to_df( list_of_dicts: list, returned_spiketimes_label: str = "spiketimes", returned_spiketrain_label: str = "spiketrain", ): """ Convert a list of named spiketrains to a dataframe. Data must be in the format of [{"st_name": spiketimes_arr}, etc] Args: list_of_dicts: A list of dicts. The dict key is the spiketrain identifier. The dict value is a numpy array of spiketimes. returned_spiketimes_label: The label of the column in the returned DataFrame containing spiketimes returned_spiketrains_label: The label of the column in the returned DataFrame containing spiketrain identifiers Returns: A pandas DataFrame containing spiketimes indexed by spiketrain. """ indexes = [] spiketrains = [] for st in list_of_dicts: for i, (k, v) in enumerate(st.items()): if i == 1: raise ValueError( 'Must pass a list of dictionaries of the form [{"stname": st_arr}' ) indexes.append(k) spiketrains.append(v) return list_to_df( spiketrains=spiketrains, indexes=indexes, returned_spiketrain_label=returned_spiketrain_label, returned_spiketimes_label=returned_spiketimes_label, )
[docs]def df_to_list_of_dicts( df: pd.core.frame.DataFrame, spiketimes_col: str = "spiketimes", spiketrain_col: str = "spiketrain", ): """ Convert a DataFrame of spiketrains to a list of dicts of spiketrains. The dicts are of the form {spiketrain_id: spiketimes_array} Args: df: A pandas DataFrame of spiketimes indexed by spiketrains spiketimes_col: The column containing spiketimes spiketrain_col: The column containing spiketrain identifiers Returns: A list of dictionarys of the form {spiketrain_id: spiketimes_array} """ return [ {d[spiketrain_col]: d[spiketimes_col]} for d in df.groupby(spiketrain_col)[spiketimes_col] .apply(np.array) .reset_index() .to_dict(orient="records") ]
[docs]def df_to_list( df: pd.core.frame.DataFrame, spiketimes_col: str = "spiketimes", spiketrain_col: str = "spiketrain", ): """ Convert a DataFrame of spiketimes to a list spiketrains. Args: df: A pandas DataFrame of spiketimes indexed by spiketrains spiketimes_col: The column containing spiketimes spiketrain_col: The column containing spiketrain identifiers Returns: spiketrain_IDs, spiketrain_list """ grouped = df.groupby(spiketrain_col)[spiketimes_col].apply(np.array) return grouped.index.values, grouped.tolist()