Skip to content

msmu.pp.add_meta

Attach metadata by exact matching of one metadata key to one observation key.

Parameters:

Name Type Description Default
mdata MuData

MuData whose modality and global .obs annotations will be updated in a copy.

required
metadata DataFrame | str | PathLike[str]

DataFrame, local file, or URL containing metadata.

required
format Literal['dataframe', 'df', 'generic', 'csv', 'tsv', 'parquet', 'sdrf'] | None

dataframe/df/generic, csv, tsv, parquet, or sdrf. None accepts a DataFrame or infers the file format from its name.

None
metadata_on str | Sequence[str] | None

Metadata join column; None uses its index. A sequence must contain exactly one key.

None
match_columns str | Sequence[str] | None

Alias of metadata_on; cannot be supplied together with it.

None
obs_columns str | Sequence[str] | None

Join column in each modality .obs; None uses each observation index. A sequence must contain exactly one key.

None
validate_sdrf bool

Validate SDRF input when using SDRF format.

True
skip_ontology bool

Skip ontology checks during SDRF validation.

True

Returns:

Type Description
MuData

A new MuData with metadata merged into each modality and global .obs; the original is unchanged.

Notes

Metadata must be nonempty with unique columns and unique non-null join keys. Each modality must have at least one matching row; unmatched rows receive missing metadata. Existing non-null annotations take precedence; only gaps are filled. For separate SDRF storage/application, see attach_sdrf and apply_sdrf_to_obs.

Examples:

import msmu as mm
import pandas as pd
metadata = pd.DataFrame({"condition": ["control"] * mdata.n_obs}, index=mdata.obs_names)
mdata = mm.pp.add_meta(mdata, metadata)