Source code for rsatoolbox.io.pandas
"""Conversions from rsatoolbox classes to pandas table objects
"""
from __future__ import annotations
from typing import TYPE_CHECKING
from pandas import DataFrame
import numpy
from numpy import asarray
if TYPE_CHECKING:
from rsatoolbox.rdm.rdms import RDMs
[docs]def rdms_to_df(rdms: RDMs) -> DataFrame:
"""Create DataFrame representation of the RDMs object
A column for:
- dissimilarity
- each rdm descriptor
- two for each pattern descriptor, suffixed by _1 and _2 respectively
Multiple RDMs are stacked row-wise.
See also the `RDMs.to_df()` method which calls this function
Args:
rdms (RDMs): the object to convert
Returns:
DataFrame: long-form pandas DataFrame with
dissimilarities and descriptors.
"""
n_rdms, n_pairs = rdms.dissimilarities.shape
cols = dict(dissimilarity=rdms.dissimilarities.ravel())
for dname, dvals in rdms.rdm_descriptors.items():
# rename the default index desc as that has special meaning in df
cname = 'rdm_index' if dname == 'index' else dname
cols[cname] = numpy.repeat(dvals, n_pairs)
for dname, dvals in rdms.pattern_descriptors.items():
ix = numpy.triu_indices(len(dvals), 1)
# rename the default index desc as that has special meaning in df
cname = 'pattern_index' if dname == 'index' else dname
for p in (0, 1):
cols[f'{cname}_{p+1}'] = numpy.tile(asarray(dvals)[ix[p]], n_rdms)
return DataFrame(cols)