scverse/anndata

Error concatenating scRNA with visium dataset

Closed this issue · 0 comments

Please make sure these conditions are met

  • I have checked that this issue has not already been reported.
  • I have confirmed this bug exists on the latest version of anndata.
  • (optional) I have confirmed this bug exists on the master branch of anndata.

Report

Hey

I'm trying to concatenate two datasets, visiumHD and scRNA (annotated). However, when I try concatenate, it gives the error below.

adata visium has the following structure with source as visium:
AnnData object with n_obs × n_vars = 152048 × 18085
obs: 'X', 'Y', 'source'
var: 'gene_ids', 'feature_types', 'genome'
uns: 'spatial'
obsm: 'spatial'
image

adata rna has this structure with source as rna:

AnnData object with n_obs × n_vars = 1786 × 33567
obs: 'cell_type', 'source'
var: 'gene_ids', 'feature_types', 'genome', 'gene_names'
obsm: 'X_scarches_emb'
image

Code:

adata_cm = adata_visium.concatenate(adata_rna, join="inner", batch_key="domain_id")

Traceback:

ValueError                                Traceback (most recent call last)
[~\AppData\Local\Temp\ipykernel_29820\61572441.py](Local/Temp/ipykernel_29820/61572441.py) in <module>
----> 1 adata_cm = adata_seqfish.concatenate(adata_rna, join="inner", batch_key="domain_id")

[lib/site-packages/anndata/_core/anndata.py) in concatenate(self, join, batch_key, batch_categories, uns_merge, index_unique, fill_value, *adatas)
   1777             fill_value=fill_value,
   1778             index_unique=index_unique,
-> 1779             pairwise=False,
   1780         )
   1781 

[lib/site-packages/anndata/_core/merge.py) in concat(adatas, axis, join, merge, uns_merge, label, keys, index_unique, fill_value, pairwise)
    937             index_unique=index_unique,
    938             fill_value=fill_value,
--> 939             axis=axis,
    940         )
    941     elif any(has_raw):

[lib/site-packages/anndata/_core/merge.py) in concat(adatas, axis, join, merge, uns_merge, label, keys, index_unique, fill_value, pairwise)
    865     # Annotation for other axis
    866     alt_annot = merge_dataframes(
--> 867         [getattr(a, alt_dim) for a in adatas], alt_indices, merge
    868     )
    869 

[clib/site-packages/anndata/_core/merge.py) in merge_dataframes(dfs, new_index, merge_strategy)
    553     dfs: Iterable[pd.DataFrame], new_index, merge_strategy=merge_unique
    554 ) -> pd.DataFrame:
--> 555     dfs = [df.reindex(index=new_index) for df in dfs]
    556     # New dataframe with all shared data
    557     new_df = pd.DataFrame(merge_strategy(dfs), index=new_index)

[lib/site-packages/anndata/_core/merge.py) in <listcomp>(.0)
    553     dfs: Iterable[pd.DataFrame], new_index, merge_strategy=merge_unique
    554 ) -> pd.DataFrame:
--> 555     dfs = [df.reindex(index=new_index) for df in dfs]
    556     # New dataframe with all shared data
    557     new_df = pd.DataFrame(merge_strategy(dfs), index=new_index)

[lib/site-packages/pandas/util/_decorators.py) in wrapper(*args, **kwargs)
    322         @wraps(func)
    323         def wrapper(*args, **kwargs) -> Callable[..., Any]:
--> 324             return func(*args, **kwargs)
    325 
    326         kind = inspect.Parameter.POSITIONAL_OR_KEYWORD

[lib/site-packages/pandas/core/frame.py) in reindex(self, *args, **kwargs)
   4770         kwargs.pop("axis", None)
   4771         kwargs.pop("labels", None)
-> 4772         return super().reindex(**kwargs)
   4773 
   4774     @deprecate_nonkeyword_arguments(version=None, allowed_args=["self", "labels"])

[lib/site-packages/pandas/core/generic.py) in reindex(self, *args, **kwargs)
   4817         # perform the reindex on the axes
   4818         return self._reindex_axes(
-> 4819             axes, level, limit, tolerance, method, fill_value, copy
   4820         ).__finalize__(self, method="reindex")
   4821 

[lib/site-packages/pandas/core/frame.py) in _reindex_axes(self, axes, level, limit, tolerance, method, fill_value, copy)
   4596         if index is not None:
   4597             frame = frame._reindex_index(
-> 4598                 index, method, copy, level, fill_value, limit, tolerance
   4599             )
   4600 

[lib/site-packages/pandas/core/frame.py) in _reindex_index(self, new_index, method, copy, level, fill_value, limit, tolerance)
   4618             copy=copy,
   4619             fill_value=fill_value,
-> 4620             allow_dups=False,
   4621         )
   4622 

[lib/site-packages/pandas/core/generic.py) in _reindex_with_indexers(self, reindexers, fill_value, copy, allow_dups)
   4887                 fill_value=fill_value,
   4888                 allow_dups=allow_dups,
-> 4889                 copy=copy,
   4890             )
   4891             # If we've made a copy once, no need to make another one

[lib/site-packages/pandas/core/internals/managers.py) in reindex_indexer(self, new_axis, indexer, axis, fill_value, allow_dups, copy, consolidate, only_slice)
    668         # some axes don't allow reindexing with dups
    669         if not allow_dups:
--> 670             self.axes[axis]._validate_can_reindex(indexer)
    671 
    672         if axis >= self.ndim:

[lib/site-packages/pandas/core/indexes/base.py) in _validate_can_reindex(self, indexer)
   3783         # trying to reindex on an axis with duplicates
   3784         if not self._index_as_unique and len(indexer):
-> 3785             raise ValueError("cannot reindex from a duplicate axis")
   3786 
   3787     def reindex(

ValueError: cannot reindex from a duplicate axis

Versions

-----
anndata             0.8.0
matplotlib          3.5.3
numpy               1.21.0
pandas              1.3.5
scanpy              1.9.0
session_info        1.0.0
sklearn             0.24.0
spann               0.0.0
torch               1.10.0+cpu
-----
PIL                 9.5.0
backcall            0.2.0
colorama            0.4.6
constants           NA
cycler              0.10.0
cython_runtime      NA
dateutil            2.9.0
debugpy             1.6.3
decorator           5.1.1
entrypoints         0.4
h5py                3.8.0
highs_wrapper       NA
importlib_metadata  NA
ipykernel           6.16.2
jedi                0.19.1
joblib              1.3.2
kiwisolver          1.4.5
llvmlite            0.39.1
matplotlib_inline   0.1.7
mpl_toolkits        NA
natsort             8.4.0
nt                  NA
ntsecuritycon       NA
numba               0.56.4
packaging           23.2
parso               0.8.4
pickleshare         0.7.5
pkg_resources       NA
prompt_toolkit      3.0.42
psutil              5.9.3
pydev_ipython       NA
pydevconsole        NA
pydevd              2.8.0
pydevd_file_utils   NA
pydevd_plugins      NA
pydevd_tracing      NA
pygments            2.17.2
pyparsing           3.1.2
pythoncom           NA
pytz                2024.1
pywintypes          NA
scipy               1.6.0
setuptools          69.0.3
six                 1.16.0
storemagic          NA
tornado             6.2
tqdm                4.66.2
traitlets           5.9.0
typing_extensions   NA
vscode              NA
wcwidth             0.2.10
win32api            NA
win32com            NA
win32security       NA
zipp                NA
zmq                 24.0.1
-----
IPython             7.33.0
jupyter_client      7.4.9
jupyter_core        4.11.1