scprep logo
Latest PyPi versionLatest Conda versionTravis CI BuildRead the DocsCoverage StatusTwitterGitHub starsCode style: black

scprep provides an all-in-one framework for loading, preprocessing, and plotting matrices in Python, with a focus on single-cell genomics.

The philosophy of scprep:

  • Data shouldn’t be hidden in a complex and bespoke class object. scprep works with numpy arrays, pandas data frames, and scipy sparse matrices, all of which are popular data formats in Python and accepted as input to most common algorithms.

  • Your analysis pipeline shouldn’t have to change based on data format. Changing from a numpy array to a pandas data frame introduces endless technical differences (e.g. in indexing matrices). scprep provides data-agnostic methods that work the same way on all formats.

  • Simple analysis should mean simple code. scprep takes care of annoying edge cases and sets nice defaults so you don’t have to.

  • Using a framework shouldn’t be limiting. Because nothing is hidden from you, you have access to the power of numpy, scipy, pandas and matplotlib just as you would if you used them directly.

Quick Start

You can use scprep with your single cell data as follows:

import scprep
# Load data
data_path = "~/mydata/my_10X_data"
data =
# Remove empty columns and rows
data = scprep.filter.filter_empty_cells(data)
data = scprep.filter.filter_empty_genes(data)
# Filter by library size to remove background
scprep.plot.plot_library_size(data, cutoff=500)
data = scprep.filter.filter_library_size(data, cutoff=500)
# Filter by mitochondrial expression to remove dead cells
mt_genes =, starts_with="MT")
scprep.plot.plot_gene_set_expression(data, genes=mt_genes, percentile=90)
data = scprep.filter.filter_gene_set_expression(data, genes=mt_genes,
# Library size normalize
data = scprep.normalize.library_size_normalize(data)
# Square root transform
data = scprep.transform.sqrt(data)


If you have any questions or require assistance using scprep, please contact us at