单细胞不同样本数据整合-解决AnnData合并时ValueError: cannot reindex from a duplicate axis问题

简介: 单细胞不同样本数据整合-解决AnnData合并时ValueError: cannot reindex from a duplicate axis问题

项目场景:

使用scanpy包进行单细胞数据分析时,往往需要整合多个样本的数据,也就是将多个AnnData对象合并为一个AnnData对象。

例如将adata_1和adata_2合并为adatas,可行的一种方法是:·

import anndata as ad 
adatas = [adata1,adata2]
adatas = ad.concatenate(adatas)

(concatenate请参考https://anndata.readthedocs.io/en/latest/generated/anndata.AnnData.concatenate.html#anndata.AnnData.concatenate)


问题描述:

在一次合并中,出现报错:“ValueError: cannot reindex from a duplicate axis”


原因分析:

“ValueError: cannot reindex from a duplicate axis”,按我的理解是指合并方向上的索引出现重复。


在本例中即adata_1和adata_2中的adatas.obs_names(adata.obs.index)有重复。

来看看单个数据的obs.index:

adata_1.obs_names  #adata_1.obs.index
Index(['AAACCCAAGCTGTTAC-1', 'AAACCCAAGTTTCTTC-1', 'AAACCCACATGGGATG-1',
       'AAACCCAGTCTGTAGT-1', 'AAACCCATCACATTGG-1', 'AAACCCATCTCTGCCA-1',
       'AAACGAAAGAGTCGAC-1', 'AAACGAAAGCATTTCG-1', 'AAACGAAGTCCATAGT-1',
       'AAACGCTCACCCATAA-1',
       ...
       'TTTGGTTGTAAGCAAT-1', 'TTTGGTTGTAGCTTGT-1', 'TTTGGTTGTCACTCTC-1',
       'TTTGGTTTCTCCGAAA-1', 'TTTGTTGCAATTTCTC-1', 'TTTGTTGCACTAGTAC-1',
       'TTTGTTGCAGCTCATA-1', 'TTTGTTGGTCGACGCT-1', 'TTTGTTGTCCGTACGG-1',
       'TTTGTTGTCCTGGTCT-1'],
      dtype='object', length=5699)

可以看到未经处理的index默认就是每个细胞的barcode字符串

第一种可能:单个数据内部obs.index重复(因为index是单个实验的barcode,因此可能性比较小);

第二种可能:两个数据使用了相同的obs.index造成重复(两个实验的barcode重复,可能性比较大).

接下来依次排查解决。

解决方案:

首先,为排除第一种可能,对单个数据的obs_name进行make_unique,调用AnnData对象obs_names_make_unique函数:

data_1.obs_names_make_unique()
data_2.obs_names_make_unique()


再次进行数据合并:

adata = ad.concat(adata, merge = "same")

不再出现报错,问题解决。

但出现警告:

Observation names are not unique. To make them unique, call `.obs_names_make_unique`.


说明第二种可能性也发生了,即不同样本使用了相同的barcode,造成合并后index和细胞不一一对应。


为了区分不同样本的obs,在原先默认的obs.index上加上样本标记,例如:

adata_1.obs_names=['sub_CRC3-'+x for x in adata_1.obs_names]
adata_1.obs_names
Index(['sub_CRC3-AAACCCAAGCTGTTAC-1', 'sub_CRC3-AAACCCAAGTTTCTTC-1',
       'sub_CRC3-AAACCCACATGGGATG-1', 'sub_CRC3-AAACCCAGTCTGTAGT-1',
       'sub_CRC3-AAACCCATCACATTGG-1', 'sub_CRC3-AAACCCATCTCTGCCA-1',
       'sub_CRC3-AAACGAAAGAGTCGAC-1', 'sub_CRC3-AAACGAAAGCATTTCG-1',
       'sub_CRC3-AAACGAAGTCCATAGT-1', 'sub_CRC3-AAACGCTCACCCATAA-1',
       ...
       'sub_CRC3-TTTGGTTGTAAGCAAT-1', 'sub_CRC3-TTTGGTTGTAGCTTGT-1',
       'sub_CRC3-TTTGGTTGTCACTCTC-1', 'sub_CRC3-TTTGGTTTCTCCGAAA-1',
       'sub_CRC3-TTTGTTGCAATTTCTC-1', 'sub_CRC3-TTTGTTGCACTAGTAC-1',
       'sub_CRC3-TTTGTTGCAGCTCATA-1', 'sub_CRC3-TTTGTTGGTCGACGCT-1',
       'sub_CRC3-TTTGTTGTCCGTACGG-1', 'sub_CRC3-TTTGTTGTCCTGGTCT-1'],
      dtype='object', length=5699)

在adata_1的obs_names字符串前加上用来样本名称“sub_CRC3”,用来在后续整合分析中区分各样本。

相关文章
|
4月前
|
安全 算法 数据挖掘
文献解读 -Profiling SARS-CoV-2 mutation fingerprints that range from the viral pangenome to individual infection quasispecies
研究者对病毒突变谱进行了分析,为遗传指纹提供了基础。该研究将泛基因组分析与有针对性的深度测序SARS-CoV-2临床样本联系起来,确定了个体患者体内发生的准物种突变,并与超过70,000种其他菌株相比确定了它们的一般患病率。对这些遗传指纹的分析可以提供一种进行分子接触追踪的方法。
34 2
文献解读 -Profiling SARS-CoV-2 mutation fingerprints that range from the viral pangenome to individual infection quasispecies
|
5月前
|
数据处理
R语言数据合并:掌握`merge`与`dplyr`中`join`的巧妙技巧
【8月更文挑战第29天】如果你已经在使用`dplyr`进行数据处理,那么推荐使用`dplyr::join`进行数据合并,因为它与`dplyr`的其他函数(如`filter()`、`select()`、`mutate()`等)无缝集成,能够提供更加流畅和一致的数据处理体验。如果你的代码中尚未使用`dplyr`,但想要尝试,那么`dplyr::join`将是一个很好的起点。
|
5月前
|
数据挖掘 索引 Python
数据分析缺失值处理(Missing Values)——删除法、填充法、插值法
数据分析缺失值处理(Missing Values)——删除法、填充法、插值法
275 2
|
6月前
|
机器学习/深度学习 算法 Python
【Python】已完美解决:机器学习填补数值型缺失值时报错)TypeError: init() got an unexpected keyword argument ‘axis’,
【Python】已完美解决:机器学习填补数值型缺失值时报错)TypeError: init() got an unexpected keyword argument ‘axis’,
61 1
|
8月前
QGIS【实例 01】筛选范围内的数据相交intersection工具使用及Feature (347897) has invalid geometry问题处理
QGIS【实例 01】筛选范围内的数据相交intersection工具使用及Feature (347897) has invalid geometry问题处理
368 0
|
存储 机器学习/深度学习 数据可视化
Series(序列)
Series(序列)是数学和统计学中的概念,表示按照一定规律排列的一组数据。在计算机科学和数据分析领域,Series也是指一种数据结构,用于存储一维数据,并具有标签或索引。
197 2
|
数据挖掘
ENVI:分类后处理_小斑块去除_Majority/Minority处理、聚类处理、过滤处理等
ENVI:分类后处理_小斑块去除_Majority/Minority处理、聚类处理、过滤处理等
1103 0
|
数据可视化 数据库
scRNA分析|Marker gene 可视化 以及 细胞亚群注释--你是如何人工注释的?
scRNA分析|Marker gene 可视化 以及 细胞亚群注释--你是如何人工注释的?
302 0
|
存储 关系型数据库 数据挖掘
R语言-Chunk大型数据框与稀疏矩阵应对 as.matrix溢出异常 “problem too large”
本文提出一种在R里面将大型数据集通过分块的方式转换出 DataFrame和 SparseMatrix的方法,能有效避免内存溢出、程序崩溃等严重问题。
300 0