diff --git a/src/spatialdata_io/readers/xenium.py b/src/spatialdata_io/readers/xenium.py index 5450d451..fcf2b6e1 100644 --- a/src/spatialdata_io/readers/xenium.py +++ b/src/spatialdata_io/readers/xenium.py @@ -605,6 +605,7 @@ def _get_polygons( else: # Use cell_id (str) as GeoDataFrame index. geo_df = GeoDataFrame({"geometry": geoms}, index=indices_mapping["cell_id"].values) + geo_df.index.name = "cell_id" else: # Fall back to extracting unique cell IDs from parquet (slow for large_string columns). # Triggered when indices_mapping is None: v < 1.3.0 (both nuclei and cells, because @@ -617,6 +618,7 @@ def _get_polygons( unique_ids = id_col.filter(np.concatenate([[True], change_mask])).to_pylist() index = _decode_cell_id_column(pd.Series(unique_ids)) geo_df = GeoDataFrame({"geometry": geoms}, index=index.values) + geo_df.index.name = "cell_id" scale = Scale([1.0 / specs["pixel_size"], 1.0 / specs["pixel_size"]], axes=("x", "y")) return ShapesModel.parse(geo_df, transformations={"global": scale}) diff --git a/tests/test_xenium.py b/tests/test_xenium.py index be353130..17903888 100644 --- a/tests/test_xenium.py +++ b/tests/test_xenium.py @@ -114,6 +114,7 @@ def test_example_data_index_integrity(dataset: str) -> None: assert sdata["nucleus_labels"]["scale0"]["image"].sel(y=3515.5, x=4618.5).data.compute() == 6392 assert np.allclose(sdata['transcripts'].compute().loc[[0, 10000, 1113949]]['x'], [2.608911, 194.917831, 1227.499268]) assert np.isclose(sdata['cell_boundaries'].loc['oipggjko-1'].geometry.centroid.x,736.4864931162789) + assert sdata['cell_boundaries'].index.name == 'cell_id' index = sdata['nucleus_boundaries']['cell_id'].index[sdata['nucleus_boundaries']['cell_id'].eq('oipggjko-1')][0] assert np.isclose(sdata['nucleus_boundaries'].loc[index].geometry.centroid.x,736.4931256878282) assert np.array_equal(sdata['table'].X.indices[:3], [1, 3, 34]) @@ -140,6 +141,7 @@ def test_example_data_index_integrity(dataset: str) -> None: assert sdata["nucleus_labels"]["scale0"]["image"].sel(y=18.5, x=3015.5).data.compute() == 2764 assert np.allclose(sdata['transcripts'].compute().loc[[0, 10000, 20000]]['x'], [174.258392, 12.210024, 214.759186]) assert np.isclose(sdata['cell_boundaries'].loc['aaanbaof-1'].geometry.centroid.x, 43.96894317275074) + assert sdata['cell_boundaries'].index.name == 'cell_id' index = sdata['nucleus_boundaries']['cell_id'].index[sdata['nucleus_boundaries']['cell_id'].eq('aaanbaof-1')][0] assert np.isclose(sdata['nucleus_boundaries'].loc[index].geometry.centroid.x,43.31874577809517) assert np.array_equal(sdata['table'].X.indices[:3], [1, 8, 19]) @@ -167,6 +169,7 @@ def test_example_data_index_integrity(dataset: str) -> None: assert sdata["nucleus_labels"]["scale0"]["image"].sel(y=4039.5, x=93.5).data.compute() == 274 assert np.allclose(sdata['transcripts'].compute().loc[[0, 10000, 20000]]['x'], [43.296875, 62.484375, 93.125]) assert np.isclose(sdata['cell_boundaries'].loc['aadmbfof-1'].geometry.centroid.x, 64.54541104696033) + assert sdata['cell_boundaries'].index.name == 'cell_id' index = sdata['nucleus_boundaries']['cell_id'].index[sdata['nucleus_boundaries']['cell_id'].eq('aadmbfof-1')][0] assert np.isclose(sdata['nucleus_boundaries'].loc[index].geometry.centroid.x, 65.43305896114295) assert np.array_equal(sdata['table'].X.indices[:3], [3, 49, 53])