InvalidIndexError: Reindexing only valid with uniquely valued Index objects
Opened this issue · 1 comments
xiang11bei commented
- [T] I have confirmed this bug exists on the latest version of cell2location. See https://github.com/BayraktarLab/cell2location#installation
- [T] I follow the instructions from the scvi-tools tutorial.
Note: Please read this guide detailing how to provide the necessary information for us to reproduce your bug.
Minimal code sample (that we can run without your data, using public data)
When a scRNA-seq integrate with spatial transcriptome using common HVGs, Anadata containing only intersecting genes cannot be retrieved by idling data
my ST data is accquired from the public dataset
(https://www.10xgenomics.com/datasets/visium-hd-cytassist-gene-expression-libraries-of-human-crc)
# Your code here
# I made the gene names unique here
adata = sc.read_visium("/data1/zhangshuomin/CRC_spatial_ref/Raw_data/square_008um")
adata.var_names_make_unique()
adata
intersect = np.intersect1d(adata_vis.var_names, inf_aver.index)
intersect
adata_vis = adata_vis[:, intersect].copy()
InvalidIndexError Traceback (most recent call last)
Cell In[20], line 2
1 #
----> 2 adata_vis = adata_vis[:, intersect].copy()
File ~/miniconda3/lib/python3.12/site-packages/anndata/_core/anndata.py:1085, in AnnData.__getitem__(self, index)
1083 def __getitem__(self, index: Index) -> AnnData:
1084 """Returns a sliced view of the object."""
-> 1085 oidx, vidx = self._normalize_indices(index)
1086 return AnnData(self, oidx=oidx, vidx=vidx, asview=True)
File ~/miniconda3/lib/python3.12/site-packages/anndata/_core/anndata.py:1066, in AnnData._normalize_indices(self, index)
1065 def _normalize_indices(self, index: Index | None) -> tuple[slice, slice]:
-> 1066 return _normalize_indices(index, self.obs_names, self.var_names)
File ~/miniconda3/lib/python3.12/site-packages/anndata/_core/index.py:36, in _normalize_indices(index, names0, names1)
34 ax0, ax1 = unpack_index(index)
35 ax0 = _normalize_index(ax0, names0)
---> 36 ax1 = _normalize_index(ax1, names1)
37 return ax0, ax1
File ~/miniconda3/lib/python3.12/site-packages/anndata/_core/index.py:97, in _normalize_index(indexer, index)
95 return indexer
96 else: # indexer should be string array
---> 97 positions = index.get_indexer(indexer)
98 if np.any(positions < 0):
99 not_found = indexer[positions < 0]
File ~/miniconda3/lib/python3.12/site-packages/pandas/core/indexes/base.py:3885, in Index.get_indexer(self, target, method, limit, tolerance)
3882 self._check_indexing_method(method, limit, tolerance)
3884 if not self._index_as_unique:
-> 3885 raise InvalidIndexError(self._requires_unique_msg)
3887 if len(target) == 0:
3888 return np.array([], dtype=np.intp)
InvalidIndexError: Reindexing only valid with uniquely valued Index objects
vitkl commented
This is an issue with the incorrect use of Scanpy and pandas. You need to make sure that variable and observation names are unique and match correctly between objects (eg adata_vis and inf_aver). This could also be an issue with package version mismatch - but this is not specific to cell2location in any way.