Python合并AnnData对象后如何移除索引自动添加的后缀?
解决AnnData合并后obs索引自动添加后缀的问题
场景说明
我有四个AnnData对象:ldata1x、ldata2x、ldata3x、ldata4x,原对象的obs索引格式类似:
ldata1x.obs.index Index(['KO_d6_r1_AAACCGGCACCTCGCT-1', 'KO_d6_r1_AAAGCCGCAAGGATTA-1', ...], dtype='object', length=1628)
执行合并代码:
ldata = ldata1x.concatenate([ldata2x, ldata3x, ldata4x])
合并后发现obs索引末尾被自动加上了-0、-1、-2、-3这类标识原对象的后缀,示例:
ldata.obs.index Index(['KO_d6_r1_AAACCGGCACCTCGCT-1-0', 'KO_d6_r1_AAAGCCGCAAGGATTA-1-0', ..., 'KO_d8_r2_TTTGTTGGTGGAAGGC-1-3'], dtype='object', length=5536)
两种解决方法
方法一:合并时直接避免添加后缀
调用concatenate时,设置index_unique=None参数,这样就不会自动给索引添加后缀:
ldata = ldata1x.concatenate([ldata2x, ldata3x, ldata4x], index_unique=None)
注意:如果不同原对象之间存在重复的obs索引,这种方式会导致合并后的索引出现重复值,需要确保各原数据集的索引是唯一的再用这个方法。
方法二:合并后移除已有的后缀
如果已经完成合并,想要去掉索引末尾的-数字后缀,可以对索引字符串进行分割处理:
# 按最后一个'-'分割,取前面的部分 ldata.obs.index = ldata.obs.index.str.rsplit('-', n=1).str[0]
这个方法会把每个索引最后一个-后面的内容去掉,刚好匹配自动添加的后缀格式。
内容的提问来源于stack exchange,提问作者jonny jeep
相关产品推荐
相关产品推荐

