ExperimentalFactor .md

lamindb provides access to the following public ExperimentalFactor ontologies through bionty:

  1. Experimental Factor Ontology

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

import bionty as bt
import pandas as pd
 connected lamindb: testuser1/test-public-ontologies

PublicOntology objects

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

experimentalfactors = bt.ExperimentalFactor.public(organism="all")
experimentalfactors
PublicOntology
Entity: ExperimentalFactor
Organism: all
Source: efo, 3.93.0
#terms: 18450

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

df = experimentalfactors.to_dataframe()
df.head()
name definition synonyms parents
ontology_id
EFO:0000001 experimental factor An Experimental Factor In Array Express Which ... ExperimentalFactor []
EFO:0000002 CS57511 Cs57511 Is An Arabidopsis Thaliana Strain As D... NaN []
EFO:0000003 CS57512 Cs57512 Is An Arabidopsis Thaliana Strain As D... NaN []
EFO:0000004 CS57515 Cs57515 Is An Arabidopsis Thaliana Strain As D... NaN []
EFO:0000005 CS57520 Cs57520 Is An Arabidopsis Thaliana Strain As D... NaN []

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 = experimentalfactors.lookup()

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

lookup.sequencer
ExperimentalFactor(ontology_id='EFO:0003739', name='sequencer', definition=nan, synonyms=nan, parents=array(['EFO:0000548'], dtype=object))

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

lookup_dict = lookup.dict()
lookup_dict["sequencer"]
ExperimentalFactor(ontology_id='EFO:0003739', name='sequencer', definition=nan, synonyms=nan, parents=array(['EFO:0000548'], dtype=object))

By default, the name field is used to generate lookup keys. You can specify another field to look up:

lookup = experimentalfactors.lookup(experimentalfactors.ontology_id)
lookup.efo_0003739
ExperimentalFactor(ontology_id='EFO:0003739', name='sequencer', definition=nan, synonyms=nan, parents=array(['EFO:0000548'], dtype=object))

Search terms

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

experimentalfactors.search("single-cell rna seq").head(3)
name definition synonyms parents
ontology_id
EFO:0008913 single-cell RNA sequencing A Protocol That Provides The Expression Profil... single-cell RNA-seq|single-cell transcriptome ... [EFO:0920118, EFO:0007832]
EFO:0023006 single-cell RNA sequencing data processing pro... A Data Transformation Protocol Describing The ... single-cell transcriptomics data processing wo... []
EFO:0023010 Salmon quantification of 10x single-cell RNA s... A Single-Cell Rna Sequencing Data Processing P... salmon_rnaseq_10x_v2|salmon 10x RNA-seq quanti... [EFO:0023006]

By default, search also covers synonyms and all other fields containing strings:

experimentalfactors.search("single-cell RNA-seq").head(3)
name definition synonyms parents
ontology_id
EFO:0008913 single-cell RNA sequencing A Protocol That Provides The Expression Profil... single-cell RNA-seq|single-cell transcriptome ... [EFO:0920118, EFO:0007832]
EFO:0008797 MATQ-seq Multiple Annealing And Dc-Tailing-Based Quanti... NaN [EFO:0001457]
EFO:0009919 SPLiT-seq Split-Pool Ligation-Based Transcriptome Sequen... split-pool ligation-based transcriptome sequen... [EFO:0001457, EFO:0010183]

Search specific field (by default, search is done on all fields containing strings):

experimentalfactors.search(
    "protocol that provides the expression profiles of single cells",
    field=experimentalfactors.definition,
).head()
name definition synonyms parents
ontology_id
EFO:0008913 single-cell RNA sequencing A Protocol That Provides The Expression Profil... single-cell RNA-seq|single-cell transcriptome ... [EFO:0920118, EFO:0007832]

Standardize ExperimentalFactor identifiers

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

df_orig = pd.DataFrame(
    index=[
        "EFO:0011021",
        "EFO:1002050",
        "EFO:1002047",
        "EFO:1002049",
        "This experimentalfactor does not exist",
    ]
)
df_orig
EFO:0011021
EFO:1002050
EFO:1002047
EFO:1002049
This experimentalfactor does not exist

We can check whether any of our values are validated against the ontology reference:

validated = experimentalfactors.validate(df_orig.index, experimentalfactors.name)
df_orig.index[~validated]
! 5 unique terms (100.00%) are not validated: 'EFO:0011021', 'EFO:1002050', 'EFO:1002047', 'EFO:1002049', 'This experimentalfactor does not exist'
Index(['EFO:0011021', 'EFO:1002050', 'EFO:1002047', 'EFO:1002049',
       'This experimentalfactor does not exist'],
      dtype='str')

Ontology source versions

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

bt.Source.filter(entity="bionty.ExperimentalFactor").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
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-09-15 10:20:18.350000+00:00 1 1 1 1 None None
# only lists the sources that are currently used
bt.Source.filter(entity="bionty.ExperimentalFactor", currently_used=True).to_dataframe()
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
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-09-15 10:20:18.350000+00:00 1 1 1 1 None None

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

source = bt.Source.filter(
    name="efo", organism="all"
).first()
experimentalfactors= bt.ExperimentalFactor.public(source=source)
experimentalfactors
PublicOntology
Entity: ExperimentalFactor
Organism: all
Source: efo, 3.93.0
#terms: 18450

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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+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-09-15 10:20:18.350000+00:00 1 1 1 1 None None