CellMarker .md .md

Bionty provides access to the following CellMarker ontologies:

  1. CellMarker

Here we show how to access and search cell marker ontologies to standardize new data.

Let us create a public ontology object with the .public() class method, which chooses a default public ontology source from Source. It’s a PublicOntology object, which you can think about as a public registry:

import bionty as bt
import pandas as pd

public = bt.CellMarker.public(organism="human")
public
Hide code cell output
→ connected lamindb: anonymous/test-public-ontologies
PublicOntology
Entity: CellMarker
Organism: human
Source: cellmarker, 2.0
#terms: 15466

As for registries, you can export the ontology as a DataFrame:

df = public.to_dataframe()
df.head()
Hide code cell output
name synonyms gene_symbol ncbi_gene_id uniprotkb_id
0 A1BG A1BG 1 P04217
1 A2M A2M 3494 NaN
2 A2ML1 A2ML1 144568 A8K2U0
3 A4GALT A4GALT 53947 A0A0S2Z5J1
4 AADAC AADAC 13 P22760

Unlike registries, you can also export it as a Pronto object via public.ontology.

Look up terms

As for registries, terms can be looked up with auto-complete:

lookup = public.lookup()

The . accessor provides normalized terms (lower case, only contains alphanumeric characters and underscores):

lookup.immp1l
Hide code cell output
CellMarker(name='IMMP1L', synonyms='', gene_symbol='IMMP1L', ncbi_gene_id='196294', uniprotkb_id='Q96LU5')

To look up the exact original strings, convert the lookup object to dict and use the [] accessor:

lookup_dict = lookup.dict()
lookup_dict["IMMP1L"]
Hide code cell output
CellMarker(name='IMMP1L', synonyms='', gene_symbol='IMMP1L', ncbi_gene_id='196294', uniprotkb_id='Q96LU5')

Search terms

Search behaves in the same way as it does for registries:

public.search("CD4").head(5)
Hide code cell output
name synonyms gene_symbol ncbi_gene_id uniprotkb_id
1900 Cd4 CD4 920 B4DT49
1901 CD40 CD40 958 A0A0S2Z3C7
1905 CD40LG CD40LG 959 P29965
1908 CD46 CD46 4179 P15529
1907 Cd44 CD44 960 P16070

Search another field (default is .name):

public.search("CD4", field=public.gene_symbol).head(1)
Hide code cell output
name synonyms gene_symbol ncbi_gene_id uniprotkb_id
1900 Cd4 CD4 920 B4DT49

Standardize cell marker identifiers

Let us generate a DataFrame that stores a number of cell markers identifiers, some of which corrupted:

markers = pd.DataFrame(
    index=[
        "KI67",
        "CCR7",
        "CD14",
        "CD8",
        "CD45RA",
        "CD4",
        "CD3",
        "CD127a",
        "PD1",
        "Invalid-1",
        "Invalid-2",
        "CD66b",
        "Siglec8",
        "Time",
    ]
)

Now let’s check which cell markers can be found in the reference:

public.inspect(markers.index, public.name);
Hide code cell output
! 8 unique terms (57.10%) are not validated for name: 'KI67', 'CCR7', 'CD14', 'CD4', 'CD127a', 'Invalid-1', 'Invalid-2', 'Time'
   detected 4 unique terms with inconsistent casing/synonyms: KI67, CCR7, CD14, CD4
→  standardize terms via .standardize()

Logging suggests to map synonyms:

synonyms_mapper = public.standardize(markers.index, return_mapper=True)
synonyms_mapper
Hide code cell output
{'KI67': 'Ki67', 'CCR7': 'Ccr7', 'CD14': 'Cd14', 'CD4': 'Cd4'}

Let’s replace the synonyms with standardized names in the DataFrame:

markers.rename(index=synonyms_mapper, inplace=True)
Hide code cell output
/tmp/ipykernel_3242/4002809018.py:1: Pandas4Warning: The inplace keyword in DataFrame.rename is deprecated and will be removed in a future version. See PDEP-8 for more details:https://pandas.pydata.org/pdeps/0008-inplace-methods-in-pandas.html
  markers.rename(index=synonyms_mapper, inplace=True)

The Time, Invalid-1 and Invalid-2 are non-marker channels which won’t be curated by cell marker:

public.inspect(markers.index, public.name);
Hide code cell output
! 4 unique terms (28.60%) are not validated for name: 'CD127a', 'Invalid-1', 'Invalid-2', 'Time'

We don’t find CD127a, let’s check in the lookup with auto-completion:

lookup = public.lookup()
lookup.cd127
Hide code cell output
CellMarker(name='CD127', synonyms='', gene_symbol='IL7R', ncbi_gene_id='3575', uniprotkb_id='P16871')

It should be cd127, we had a typo there with cd127a:

curated_df = markers.rename(index={"CD127a": lookup.cd127.name})

Optionally, search:

public.search("CD127a").head()
Hide code cell output
name synonyms gene_symbol ncbi_gene_id uniprotkb_id

Now we see that all cell marker candidates validate:

public.validate(curated_df.index, public.name);
Hide code cell output
! 3 unique terms (21.40%) are not validated: 'Invalid-1', 'Invalid-2', 'Time'

Ontology source versions

For any given entity, we can choose from a number of versions:

bt.Source.filter(entity="bionty.CellMarker").to_dataframe()
Hide code cell output
uid entity organism name version in_db currently_used description url md5 source_website is_locked created_at branch_id created_on_id space_id created_by_id run_id dataframe_artifact_id
id
22 7bV5uJo3 bionty.CellMarker mouse cellmarker 2.0 False True CellMarker s3://bionty-assets/mouse_cellmarker_2.0_CellMa... None http://bio-bigdata.hrbmu.edu.cn/CellMarker False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
21 3kDh8qAX bionty.CellMarker human cellmarker 2.0 False True CellMarker s3://bionty-assets/human_cellmarker_2.0_CellMa... None http://bio-bigdata.hrbmu.edu.cn/CellMarker False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
# only lists the sources that are currently used
bt.Source.filter(entity="bionty.CellMarker", currently_used=True).to_dataframe()
Hide code cell output
uid entity organism name version in_db currently_used description url md5 source_website is_locked created_at branch_id created_on_id space_id created_by_id run_id dataframe_artifact_id
id
22 7bV5uJo3 bionty.CellMarker mouse cellmarker 2.0 False True CellMarker s3://bionty-assets/mouse_cellmarker_2.0_CellMa... None http://bio-bigdata.hrbmu.edu.cn/CellMarker False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
21 3kDh8qAX bionty.CellMarker human cellmarker 2.0 False True CellMarker s3://bionty-assets/human_cellmarker_2.0_CellMa... None http://bio-bigdata.hrbmu.edu.cn/CellMarker False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None

When instantiating a Bionty object, we can choose a source or version:

source = bt.Source.get(name="cellmarker", version="2.0", organism="human")
public = bt.CellMarker.public(source=source)
public
Hide code cell output
PublicOntology
Entity: CellMarker
Organism: human
Source: cellmarker, 2.0
#terms: 15466

The currently used ontologies can be displayed using:

bt.Source.filter(currently_used=True).to_dataframe()
Hide code cell output
! truncated query result to limit=20 Source objects
uid entity organism name version in_db currently_used description url md5 source_website is_locked created_at branch_id created_on_id space_id created_by_id run_id dataframe_artifact_id
id
43 5JnVODh4 BioSample all ncbi 2023-09 False True NCBI BioSample attributes s3://bionty-assets/df_all__ncbi__2023-09__BioS... None https://www.ncbi.nlm.nih.gov/biosample/docs/at... False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
42 7au3ZQrD bionty.Ethnicity human hancestro 2025-10-14 False True Human Ancestry Ontology http://purl.obolibrary.org/obo/hancestro/relea... None https://github.com/EBISPOT/hancestro False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
41 6na9vRls bionty.DevelopmentalStage mouse mmusdv 2025-01-23 False True Mouse Developmental Stages https://github.com/obophenotype/developmental-... None https://github.com/obophenotype/developmental-... False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
40 7JO1x6p1 bionty.DevelopmentalStage human hsapdv 2025-01-23 False True Human Developmental Stages https://github.com/obophenotype/developmental-... None https://github.com/obophenotype/developmental-... False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
38 6bSx9Bpd Drug all chebi 2026-09-01 False True Chemical Entities of Biological Interest s3://bionty-assets/df_all__chebi__2026-09-01__... None https://www.ebi.ac.uk/chebi/ False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
37 3rm9aOzL BFXPipeline all lamin 1.0.0 False True Bioinformatics Pipeline s3://bionty-assets/df_all__lamin__1.0.0__BFXpi... None https://lamin.ai False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
35 2UZHts8n bionty.Pathway all go 2025-10-10 False True Gene Ontology http://purl.obolibrary.org/obo/go/releases/202... None http://geneontology.org False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
33 6Q3pqM4z bionty.Phenotype human hp 2026-09-01 False True Human Phenotype Ontology https://github.com/obophenotype/human-phenotyp... None https://hpo.jax.org False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
32 2rMQe2ZH bionty.Phenotype all pato 2025-05-14 False True Phenotype And Trait Ontology http://purl.obolibrary.org/obo/pato/releases/2... None https://github.com/pato-ontology/pato False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
31 1NahqGNY bionty.ExperimentalFactor all efo 3.93.0 False True The Experimental Factor Ontology https://github.com/EBISPOT/efo/releases/downlo... None https://bioportal.bioontology.org/ontologies/EFO False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
29 1UuMSPhi bionty.Disease human doid 2026-08-31 False True Human Disease Ontology http://purl.obolibrary.org/obo/doid/releases/2... None https://disease-ontology.org False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
28 6Oa6a7Pp bionty.Disease all mondo 2026-09-01 False True Mondo Disease Ontology http://purl.obolibrary.org/obo/mondo/releases/... None https://mondo.monarchinitiative.org False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
27 5PozusMv bionty.Tissue all uberon 2026-06-23 False True Uberon multi-species anatomy ontology https://github.com/obophenotype/uberon/release... None http://obophenotype.github.io/uberon False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
26 dq7QgcSP bionty.CellType all cl 2026-06-08 False True Cell Ontology http://purl.obolibrary.org/obo/cl/releases/202... None https://obophenotype.github.io/cell-ontology False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
23 13AwGU4n bionty.CellLine all cellosaurus 56.0 False True Cellosaurus s3://bionty-assets/df_all__cellosaurus__56.0__... None https://www.cellosaurus.org/ False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
22 7bV5uJo3 bionty.CellMarker mouse cellmarker 2.0 False True CellMarker s3://bionty-assets/mouse_cellmarker_2.0_CellMa... None http://bio-bigdata.hrbmu.edu.cn/CellMarker False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
21 3kDh8qAX bionty.CellMarker human cellmarker 2.0 False True CellMarker s3://bionty-assets/human_cellmarker_2.0_CellMa... None http://bio-bigdata.hrbmu.edu.cn/CellMarker False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
20 1FUaRMsN bionty.Protein bos taurus uniprot 2026-01 False True UniProt s3://bionty-assets/df_bos-taurus__uniprot__202... None https://www.uniprot.org False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
19 8vZdNSGd bionty.Protein saccharomyces cerevisiae uniprot 2026-01 False True UniProt s3://bionty-assets/df_saccharomyces-cerevisiae... None https://www.uniprot.org False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None
18 1894sCXT bionty.Protein arabidopsis thaliana uniprot 2026-01 False True UniProt s3://bionty-assets/df_arabidopsis-thaliana__un... None https://www.uniprot.org False 2026-10-03 06:16:22.727+00:00 1 1 1 1 None None