sdata.table.obsm['spatial'] object populated with Nan's #387

Description

@mkunst23

Hi,

I'm trying to run the squidpy integration with spatialdata but can't do any spatial calculations (i.e. neighborhood connectivities) because the sdata.table.obsm['spatial'] object is populated with Nan's.


ValueError Traceback (most recent call last)
Cell In[13], line 1
----> 1 sq.gr.spatial_neighbors(sdata.table)

File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:160, in spatial_neighbors(adata, spatial_key, library_key, coord_type, n_neighs, radius, delaunay, n_rings, percentile, transform, set_diag, key_added, copy)
158 Dst = block_diag([m[1] for m in mats], format="csr")[ixs, :][:, ixs]
159 else:
--> 160 Adj, Dst = _build_fun(adata)
162 neighs_key = Key.uns.spatial_neighs(key_added)
163 conns_key = Key.obsp.spatial_conn(key_added)

File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:198, in _spatial_neighbor(adata, spatial_key, coord_type, n_neighs, radius, delaunay, n_rings, transform, set_diag, percentile)
196 Adj, Dst = _build_grid(coords, n_neighs=n_neighs, n_rings=n_rings, delaunay=delaunay, set_diag=set_diag)
197 elif coord_type == CoordType.GENERIC:
--> 198 Adj, Dst = _build_connectivity(
199 coords, n_neighs=n_neighs, radius=radius, delaunay=delaunay, return_distance=True, set_diag=set_diag
200 )
201 else:
202 raise NotImplementedError(f"Coordinate type {coord_type} is not yet implemented.")

File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:295, in _build_connectivity(coords, n_neighs, radius, delaunay, neigh_correct, set_diag, return_distance)
293 r = 1 if radius is None else radius if isinstance(radius, (int, float)) else max(radius)
294 tree = NearestNeighbors(n_neighbors=n_neighs, radius=r, metric="euclidean")
--> 295 tree.fit(coords)
297 if radius is None:
298 results = tree.kneighbors()

File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/base.py:1152, in _fit_context..decorator..wrapper(estimator, *args, **kwargs)
1145 estimator._validate_params()
1147 with config_context(
1148 skip_parameter_validation=(
1149 prefer_skip_nested_validation or global_skip_validation
1150 )
1151 ):
-> 1152 return fit_method(estimator, *args, **kwargs)

File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/neighbors/_unsupervised.py:175, in NearestNeighbors.fit(self, X, y)
154 @_fit_context(
155 # NearestNeighbors.metric is not validated yet
156 prefer_skip_nested_validation=False
157 )
158 def fit(self, X, y=None):
159 """Fit the nearest neighbors estimator from the training dataset.
160
161 Parameters
(...)
173 The fitted nearest neighbors estimator.
174 """
--> 175 return self._fit(X)

File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/neighbors/_base.py:498, in NeighborsBase._fit(self, X, y)
496 else:
497 if not isinstance(X, (KDTree, BallTree, NeighborsBase)):
--> 498 X = self._validate_data(X, accept_sparse="csr", order="C")
500 self._check_algorithm_metric()
501 if self.metric_params is None:

File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/base.py:605, in BaseEstimator._validate_data(self, X, y, reset, validate_separately, cast_to_ndarray, **check_params)
603 out = X, y
604 elif not no_val_X and no_val_y:
--> 605 out = check_array(X, input_name="X", **check_params)
606 elif no_val_X and not no_val_y:
607 out = _check_y(y, **check_params)

File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:957, in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)
951 raise ValueError(
952 "Found array with dim %d. %s expected <= 2."
953 % (array.ndim, estimator_name)
954 )
956 if force_all_finite:
--> 957 _assert_all_finite(
958 array,
959 input_name=input_name,
960 estimator_name=estimator_name,
961 allow_nan=force_all_finite == "allow-nan",
962 )
964 if ensure_min_samples > 0:
965 n_samples = _num_samples(array)

File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:122, in _assert_all_finite(X, allow_nan, msg_dtype, estimator_name, input_name)
119 if first_pass_isfinite:
120 return
--> 122 _assert_all_finite_element_wise(
123 X,
124 xp=xp,
125 allow_nan=allow_nan,
126 msg_dtype=msg_dtype,
127 estimator_name=estimator_name,
128 input_name=input_name,
129 )

File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:171, in _assert_all_finite_element_wise(X, xp, allow_nan, msg_dtype, estimator_name, input_name)
154 if estimator_name and input_name == "X" and has_nan_error:
155 # Improve the error message on how to handle missing values in
156 # scikit-learn.
157 msg_err += (
158 f"\n{estimator_name} does not accept missing values"
159 " encoded as NaN natively. For supervised learning, you might want"
(...)
169 "#estimators-that-handle-nan-values"
170 )
--> 171 raise ValueError(msg_err)

ValueError: Input X contains NaN.
NearestNeighbors does not accept missing values encoded as NaN natively. For supervised learning, you might want to consider sklearn.ensemble.HistGradientBoostingClassifier and Regressor which accept missing values encoded as NaNs natively. Alternatively, it is possible to preprocess the data, for instance by using an imputer transformer in a pipeline or drop samples with missing values. See https://scikit-learn.org/stable/modules/impute.html You can find a list of all estimators that handle NaN values at the following page: https://scikit-learn.org/stable/modules/impute.html#estimators-that-handle-nan-values

sdata.table.obsm['spatial']

array([[nan, nan],
[nan, nan],
[nan, nan],
...,
[nan, nan],
[nan, nan],
[nan, nan]])

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
     blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    
    Skip to content

    sdata.table.obsm['spatial'] object populated with Nan's #387

    Description

    @mkunst23

    Hi,

    I'm trying to run the squidpy integration with spatialdata but can't do any spatial calculations (i.e. neighborhood connectivities) because the sdata.table.obsm['spatial'] object is populated with Nan's.


    ValueError Traceback (most recent call last)
    Cell In[13], line 1
    ----> 1 sq.gr.spatial_neighbors(sdata.table)

    File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:160, in spatial_neighbors(adata, spatial_key, library_key, coord_type, n_neighs, radius, delaunay, n_rings, percentile, transform, set_diag, key_added, copy)
    158 Dst = block_diag([m[1] for m in mats], format="csr")[ixs, :][:, ixs]
    159 else:
    --> 160 Adj, Dst = _build_fun(adata)
    162 neighs_key = Key.uns.spatial_neighs(key_added)
    163 conns_key = Key.obsp.spatial_conn(key_added)

    File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:198, in _spatial_neighbor(adata, spatial_key, coord_type, n_neighs, radius, delaunay, n_rings, transform, set_diag, percentile)
    196 Adj, Dst = _build_grid(coords, n_neighs=n_neighs, n_rings=n_rings, delaunay=delaunay, set_diag=set_diag)
    197 elif coord_type == CoordType.GENERIC:
    --> 198 Adj, Dst = _build_connectivity(
    199 coords, n_neighs=n_neighs, radius=radius, delaunay=delaunay, return_distance=True, set_diag=set_diag
    200 )
    201 else:
    202 raise NotImplementedError(f"Coordinate type {coord_type} is not yet implemented.")

    File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:295, in _build_connectivity(coords, n_neighs, radius, delaunay, neigh_correct, set_diag, return_distance)
    293 r = 1 if radius is None else radius if isinstance(radius, (int, float)) else max(radius)
    294 tree = NearestNeighbors(n_neighbors=n_neighs, radius=r, metric="euclidean")
    --> 295 tree.fit(coords)
    297 if radius is None:
    298 results = tree.kneighbors()

    File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/base.py:1152, in _fit_context..decorator..wrapper(estimator, *args, **kwargs)
    1145 estimator._validate_params()
    1147 with config_context(
    1148 skip_parameter_validation=(
    1149 prefer_skip_nested_validation or global_skip_validation
    1150 )
    1151 ):
    -> 1152 return fit_method(estimator, *args, **kwargs)

    File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/neighbors/_unsupervised.py:175, in NearestNeighbors.fit(self, X, y)
    154 @_fit_context(
    155 # NearestNeighbors.metric is not validated yet
    156 prefer_skip_nested_validation=False
    157 )
    158 def fit(self, X, y=None):
    159 """Fit the nearest neighbors estimator from the training dataset.
    160
    161 Parameters
    (...)
    173 The fitted nearest neighbors estimator.
    174 """
    --> 175 return self._fit(X)

    File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/neighbors/_base.py:498, in NeighborsBase._fit(self, X, y)
    496 else:
    497 if not isinstance(X, (KDTree, BallTree, NeighborsBase)):
    --> 498 X = self._validate_data(X, accept_sparse="csr", order="C")
    500 self._check_algorithm_metric()
    501 if self.metric_params is None:

    File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/base.py:605, in BaseEstimator._validate_data(self, X, y, reset, validate_separately, cast_to_ndarray, **check_params)
    603 out = X, y
    604 elif not no_val_X and no_val_y:
    --> 605 out = check_array(X, input_name="X", **check_params)
    606 elif no_val_X and not no_val_y:
    607 out = _check_y(y, **check_params)

    File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:957, in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)
    951 raise ValueError(
    952 "Found array with dim %d. %s expected <= 2."
    953 % (array.ndim, estimator_name)
    954 )
    956 if force_all_finite:
    --> 957 _assert_all_finite(
    958 array,
    959 input_name=input_name,
    960 estimator_name=estimator_name,
    961 allow_nan=force_all_finite == "allow-nan",
    962 )
    964 if ensure_min_samples > 0:
    965 n_samples = _num_samples(array)

    File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:122, in _assert_all_finite(X, allow_nan, msg_dtype, estimator_name, input_name)
    119 if first_pass_isfinite:
    120 return
    --> 122 _assert_all_finite_element_wise(
    123 X,
    124 xp=xp,
    125 allow_nan=allow_nan,
    126 msg_dtype=msg_dtype,
    127 estimator_name=estimator_name,
    128 input_name=input_name,
    129 )

    File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:171, in _assert_all_finite_element_wise(X, xp, allow_nan, msg_dtype, estimator_name, input_name)
    154 if estimator_name and input_name == "X" and has_nan_error:
    155 # Improve the error message on how to handle missing values in
    156 # scikit-learn.
    157 msg_err += (
    158 f"\n{estimator_name} does not accept missing values"
    159 " encoded as NaN natively. For supervised learning, you might want"
    (...)
    169 "#estimators-that-handle-nan-values"
    170 )
    --> 171 raise ValueError(msg_err)

    ValueError: Input X contains NaN.
    NearestNeighbors does not accept missing values encoded as NaN natively. For supervised learning, you might want to consider sklearn.ensemble.HistGradientBoostingClassifier and Regressor which accept missing values encoded as NaNs natively. Alternatively, it is possible to preprocess the data, for instance by using an imputer transformer in a pipeline or drop samples with missing values. See https://scikit-learn.org/stable/modules/impute.html You can find a list of all estimators that handle NaN values at the following page: https://scikit-learn.org/stable/modules/impute.html#estimators-that-handle-nan-values

    sdata.table.obsm['spatial']

    array([[nan, nan],
    [nan, nan],
    [nan, nan],
    ...,
    [nan, nan],
    [nan, nan],
    [nan, nan]])

    Metadata

    Metadata

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
      Skip to content

      sdata.table.obsm['spatial'] object populated with Nan's #387

      Description

      @mkunst23

      Hi,

      I'm trying to run the squidpy integration with spatialdata but can't do any spatial calculations (i.e. neighborhood connectivities) because the sdata.table.obsm['spatial'] object is populated with Nan's.


      ValueError Traceback (most recent call last)
      Cell In[13], line 1
      ----> 1 sq.gr.spatial_neighbors(sdata.table)

      File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:160, in spatial_neighbors(adata, spatial_key, library_key, coord_type, n_neighs, radius, delaunay, n_rings, percentile, transform, set_diag, key_added, copy)
      158 Dst = block_diag([m[1] for m in mats], format="csr")[ixs, :][:, ixs]
      159 else:
      --> 160 Adj, Dst = _build_fun(adata)
      162 neighs_key = Key.uns.spatial_neighs(key_added)
      163 conns_key = Key.obsp.spatial_conn(key_added)

      File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:198, in _spatial_neighbor(adata, spatial_key, coord_type, n_neighs, radius, delaunay, n_rings, transform, set_diag, percentile)
      196 Adj, Dst = _build_grid(coords, n_neighs=n_neighs, n_rings=n_rings, delaunay=delaunay, set_diag=set_diag)
      197 elif coord_type == CoordType.GENERIC:
      --> 198 Adj, Dst = _build_connectivity(
      199 coords, n_neighs=n_neighs, radius=radius, delaunay=delaunay, return_distance=True, set_diag=set_diag
      200 )
      201 else:
      202 raise NotImplementedError(f"Coordinate type {coord_type} is not yet implemented.")

      File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:295, in _build_connectivity(coords, n_neighs, radius, delaunay, neigh_correct, set_diag, return_distance)
      293 r = 1 if radius is None else radius if isinstance(radius, (int, float)) else max(radius)
      294 tree = NearestNeighbors(n_neighbors=n_neighs, radius=r, metric="euclidean")
      --> 295 tree.fit(coords)
      297 if radius is None:
      298 results = tree.kneighbors()

      File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/base.py:1152, in _fit_context..decorator..wrapper(estimator, *args, **kwargs)
      1145 estimator._validate_params()
      1147 with config_context(
      1148 skip_parameter_validation=(
      1149 prefer_skip_nested_validation or global_skip_validation
      1150 )
      1151 ):
      -> 1152 return fit_method(estimator, *args, **kwargs)

      File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/neighbors/_unsupervised.py:175, in NearestNeighbors.fit(self, X, y)
      154 @_fit_context(
      155 # NearestNeighbors.metric is not validated yet
      156 prefer_skip_nested_validation=False
      157 )
      158 def fit(self, X, y=None):
      159 """Fit the nearest neighbors estimator from the training dataset.
      160
      161 Parameters
      (...)
      173 The fitted nearest neighbors estimator.
      174 """
      --> 175 return self._fit(X)

      File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/neighbors/_base.py:498, in NeighborsBase._fit(self, X, y)
      496 else:
      497 if not isinstance(X, (KDTree, BallTree, NeighborsBase)):
      --> 498 X = self._validate_data(X, accept_sparse="csr", order="C")
      500 self._check_algorithm_metric()
      501 if self.metric_params is None:

      File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/base.py:605, in BaseEstimator._validate_data(self, X, y, reset, validate_separately, cast_to_ndarray, **check_params)
      603 out = X, y
      604 elif not no_val_X and no_val_y:
      --> 605 out = check_array(X, input_name="X", **check_params)
      606 elif no_val_X and not no_val_y:
      607 out = _check_y(y, **check_params)

      File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:957, in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)
      951 raise ValueError(
      952 "Found array with dim %d. %s expected <= 2."
      953 % (array.ndim, estimator_name)
      954 )
      956 if force_all_finite:
      --> 957 _assert_all_finite(
      958 array,
      959 input_name=input_name,
      960 estimator_name=estimator_name,
      961 allow_nan=force_all_finite == "allow-nan",
      962 )
      964 if ensure_min_samples > 0:
      965 n_samples = _num_samples(array)

      File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:122, in _assert_all_finite(X, allow_nan, msg_dtype, estimator_name, input_name)
      119 if first_pass_isfinite:
      120 return
      --> 122 _assert_all_finite_element_wise(
      123 X,
      124 xp=xp,
      125 allow_nan=allow_nan,
      126 msg_dtype=msg_dtype,
      127 estimator_name=estimator_name,
      128 input_name=input_name,
      129 )

      File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:171, in _assert_all_finite_element_wise(X, xp, allow_nan, msg_dtype, estimator_name, input_name)
      154 if estimator_name and input_name == "X" and has_nan_error:
      155 # Improve the error message on how to handle missing values in
      156 # scikit-learn.
      157 msg_err += (
      158 f"\n{estimator_name} does not accept missing values"
      159 " encoded as NaN natively. For supervised learning, you might want"
      (...)
      169 "#estimators-that-handle-nan-values"
      170 )
      --> 171 raise ValueError(msg_err)

      ValueError: Input X contains NaN.
      NearestNeighbors does not accept missing values encoded as NaN natively. For supervised learning, you might want to consider sklearn.ensemble.HistGradientBoostingClassifier and Regressor which accept missing values encoded as NaNs natively. Alternatively, it is possible to preprocess the data, for instance by using an imputer transformer in a pipeline or drop samples with missing values. See https://scikit-learn.org/stable/modules/impute.html You can find a list of all estimators that handle NaN values at the following page: https://scikit-learn.org/stable/modules/impute.html#estimators-that-handle-nan-values

      sdata.table.obsm['spatial']

      array([[nan, nan],
      [nan, nan],
      [nan, nan],
      ...,
      [nan, nan],
      [nan, nan],
      [nan, nan]])

      Metadata

      Metadata

      Labels

      No labels
      No labels

      Type

      No type

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
        Skip to content

        sdata.table.obsm['spatial'] object populated with Nan's #387

        Description

        @mkunst23

        Hi,

        I'm trying to run the squidpy integration with spatialdata but can't do any spatial calculations (i.e. neighborhood connectivities) because the sdata.table.obsm['spatial'] object is populated with Nan's.


        ValueError Traceback (most recent call last)
        Cell In[13], line 1
        ----> 1 sq.gr.spatial_neighbors(sdata.table)

        File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:160, in spatial_neighbors(adata, spatial_key, library_key, coord_type, n_neighs, radius, delaunay, n_rings, percentile, transform, set_diag, key_added, copy)
        158 Dst = block_diag([m[1] for m in mats], format="csr")[ixs, :][:, ixs]
        159 else:
        --> 160 Adj, Dst = _build_fun(adata)
        162 neighs_key = Key.uns.spatial_neighs(key_added)
        163 conns_key = Key.obsp.spatial_conn(key_added)

        File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:198, in _spatial_neighbor(adata, spatial_key, coord_type, n_neighs, radius, delaunay, n_rings, transform, set_diag, percentile)
        196 Adj, Dst = _build_grid(coords, n_neighs=n_neighs, n_rings=n_rings, delaunay=delaunay, set_diag=set_diag)
        197 elif coord_type == CoordType.GENERIC:
        --> 198 Adj, Dst = _build_connectivity(
        199 coords, n_neighs=n_neighs, radius=radius, delaunay=delaunay, return_distance=True, set_diag=set_diag
        200 )
        201 else:
        202 raise NotImplementedError(f"Coordinate type {coord_type} is not yet implemented.")

        File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:295, in _build_connectivity(coords, n_neighs, radius, delaunay, neigh_correct, set_diag, return_distance)
        293 r = 1 if radius is None else radius if isinstance(radius, (int, float)) else max(radius)
        294 tree = NearestNeighbors(n_neighbors=n_neighs, radius=r, metric="euclidean")
        --> 295 tree.fit(coords)
        297 if radius is None:
        298 results = tree.kneighbors()

        File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/base.py:1152, in _fit_context..decorator..wrapper(estimator, *args, **kwargs)
        1145 estimator._validate_params()
        1147 with config_context(
        1148 skip_parameter_validation=(
        1149 prefer_skip_nested_validation or global_skip_validation
        1150 )
        1151 ):
        -> 1152 return fit_method(estimator, *args, **kwargs)

        File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/neighbors/_unsupervised.py:175, in NearestNeighbors.fit(self, X, y)
        154 @_fit_context(
        155 # NearestNeighbors.metric is not validated yet
        156 prefer_skip_nested_validation=False
        157 )
        158 def fit(self, X, y=None):
        159 """Fit the nearest neighbors estimator from the training dataset.
        160
        161 Parameters
        (...)
        173 The fitted nearest neighbors estimator.
        174 """
        --> 175 return self._fit(X)

        File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/neighbors/_base.py:498, in NeighborsBase._fit(self, X, y)
        496 else:
        497 if not isinstance(X, (KDTree, BallTree, NeighborsBase)):
        --> 498 X = self._validate_data(X, accept_sparse="csr", order="C")
        500 self._check_algorithm_metric()
        501 if self.metric_params is None:

        File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/base.py:605, in BaseEstimator._validate_data(self, X, y, reset, validate_separately, cast_to_ndarray, **check_params)
        603 out = X, y
        604 elif not no_val_X and no_val_y:
        --> 605 out = check_array(X, input_name="X", **check_params)
        606 elif no_val_X and not no_val_y:
        607 out = _check_y(y, **check_params)

        File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:957, in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)
        951 raise ValueError(
        952 "Found array with dim %d. %s expected <= 2."
        953 % (array.ndim, estimator_name)
        954 )
        956 if force_all_finite:
        --> 957 _assert_all_finite(
        958 array,
        959 input_name=input_name,
        960 estimator_name=estimator_name,
        961 allow_nan=force_all_finite == "allow-nan",
        962 )
        964 if ensure_min_samples > 0:
        965 n_samples = _num_samples(array)

        File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:122, in _assert_all_finite(X, allow_nan, msg_dtype, estimator_name, input_name)
        119 if first_pass_isfinite:
        120 return
        --> 122 _assert_all_finite_element_wise(
        123 X,
        124 xp=xp,
        125 allow_nan=allow_nan,
        126 msg_dtype=msg_dtype,
        127 estimator_name=estimator_name,
        128 input_name=input_name,
        129 )

        File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:171, in _assert_all_finite_element_wise(X, xp, allow_nan, msg_dtype, estimator_name, input_name)
        154 if estimator_name and input_name == "X" and has_nan_error:
        155 # Improve the error message on how to handle missing values in
        156 # scikit-learn.
        157 msg_err += (
        158 f"\n{estimator_name} does not accept missing values"
        159 " encoded as NaN natively. For supervised learning, you might want"
        (...)
        169 "#estimators-that-handle-nan-values"
        170 )
        --> 171 raise ValueError(msg_err)

        ValueError: Input X contains NaN.
        NearestNeighbors does not accept missing values encoded as NaN natively. For supervised learning, you might want to consider sklearn.ensemble.HistGradientBoostingClassifier and Regressor which accept missing values encoded as NaNs natively. Alternatively, it is possible to preprocess the data, for instance by using an imputer transformer in a pipeline or drop samples with missing values. See https://scikit-learn.org/stable/modules/impute.html You can find a list of all estimators that handle NaN values at the following page: https://scikit-learn.org/stable/modules/impute.html#estimators-that-handle-nan-values

        sdata.table.obsm['spatial']

        array([[nan, nan],
        [nan, nan],
        [nan, nan],
        ...,
        [nan, nan],
        [nan, nan],
        [nan, nan]])

        Metadata

        Metadata

        Labels

        No labels
        No labels

        Type

        No type

        Projects

        No projects

          Milestone

          No milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
          Skip to content

          sdata.table.obsm['spatial'] object populated with Nan's #387

          Description

          @mkunst23

          Hi,

          I'm trying to run the squidpy integration with spatialdata but can't do any spatial calculations (i.e. neighborhood connectivities) because the sdata.table.obsm['spatial'] object is populated with Nan's.


          ValueError Traceback (most recent call last)
          Cell In[13], line 1
          ----> 1 sq.gr.spatial_neighbors(sdata.table)

          File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:160, in spatial_neighbors(adata, spatial_key, library_key, coord_type, n_neighs, radius, delaunay, n_rings, percentile, transform, set_diag, key_added, copy)
          158 Dst = block_diag([m[1] for m in mats], format="csr")[ixs, :][:, ixs]
          159 else:
          --> 160 Adj, Dst = _build_fun(adata)
          162 neighs_key = Key.uns.spatial_neighs(key_added)
          163 conns_key = Key.obsp.spatial_conn(key_added)

          File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:198, in _spatial_neighbor(adata, spatial_key, coord_type, n_neighs, radius, delaunay, n_rings, transform, set_diag, percentile)
          196 Adj, Dst = _build_grid(coords, n_neighs=n_neighs, n_rings=n_rings, delaunay=delaunay, set_diag=set_diag)
          197 elif coord_type == CoordType.GENERIC:
          --> 198 Adj, Dst = _build_connectivity(
          199 coords, n_neighs=n_neighs, radius=radius, delaunay=delaunay, return_distance=True, set_diag=set_diag
          200 )
          201 else:
          202 raise NotImplementedError(f"Coordinate type {coord_type} is not yet implemented.")

          File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:295, in _build_connectivity(coords, n_neighs, radius, delaunay, neigh_correct, set_diag, return_distance)
          293 r = 1 if radius is None else radius if isinstance(radius, (int, float)) else max(radius)
          294 tree = NearestNeighbors(n_neighbors=n_neighs, radius=r, metric="euclidean")
          --> 295 tree.fit(coords)
          297 if radius is None:
          298 results = tree.kneighbors()

          File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/base.py:1152, in _fit_context..decorator..wrapper(estimator, *args, **kwargs)
          1145 estimator._validate_params()
          1147 with config_context(
          1148 skip_parameter_validation=(
          1149 prefer_skip_nested_validation or global_skip_validation
          1150 )
          1151 ):
          -> 1152 return fit_method(estimator, *args, **kwargs)

          File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/neighbors/_unsupervised.py:175, in NearestNeighbors.fit(self, X, y)
          154 @_fit_context(
          155 # NearestNeighbors.metric is not validated yet
          156 prefer_skip_nested_validation=False
          157 )
          158 def fit(self, X, y=None):
          159 """Fit the nearest neighbors estimator from the training dataset.
          160
          161 Parameters
          (...)
          173 The fitted nearest neighbors estimator.
          174 """
          --> 175 return self._fit(X)

          File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/neighbors/_base.py:498, in NeighborsBase._fit(self, X, y)
          496 else:
          497 if not isinstance(X, (KDTree, BallTree, NeighborsBase)):
          --> 498 X = self._validate_data(X, accept_sparse="csr", order="C")
          500 self._check_algorithm_metric()
          501 if self.metric_params is None:

          File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/base.py:605, in BaseEstimator._validate_data(self, X, y, reset, validate_separately, cast_to_ndarray, **check_params)
          603 out = X, y
          604 elif not no_val_X and no_val_y:
          --> 605 out = check_array(X, input_name="X", **check_params)
          606 elif no_val_X and not no_val_y:
          607 out = _check_y(y, **check_params)

          File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:957, in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)
          951 raise ValueError(
          952 "Found array with dim %d. %s expected <= 2."
          953 % (array.ndim, estimator_name)
          954 )
          956 if force_all_finite:
          --> 957 _assert_all_finite(
          958 array,
          959 input_name=input_name,
          960 estimator_name=estimator_name,
          961 allow_nan=force_all_finite == "allow-nan",
          962 )
          964 if ensure_min_samples > 0:
          965 n_samples = _num_samples(array)

          File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:122, in _assert_all_finite(X, allow_nan, msg_dtype, estimator_name, input_name)
          119 if first_pass_isfinite:
          120 return
          --> 122 _assert_all_finite_element_wise(
          123 X,
          124 xp=xp,
          125 allow_nan=allow_nan,
          126 msg_dtype=msg_dtype,
          127 estimator_name=estimator_name,
          128 input_name=input_name,
          129 )

          File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:171, in _assert_all_finite_element_wise(X, xp, allow_nan, msg_dtype, estimator_name, input_name)
          154 if estimator_name and input_name == "X" and has_nan_error:
          155 # Improve the error message on how to handle missing values in
          156 # scikit-learn.
          157 msg_err += (
          158 f"\n{estimator_name} does not accept missing values"
          159 " encoded as NaN natively. For supervised learning, you might want"
          (...)
          169 "#estimators-that-handle-nan-values"
          170 )
          --> 171 raise ValueError(msg_err)

          ValueError: Input X contains NaN.
          NearestNeighbors does not accept missing values encoded as NaN natively. For supervised learning, you might want to consider sklearn.ensemble.HistGradientBoostingClassifier and Regressor which accept missing values encoded as NaNs natively. Alternatively, it is possible to preprocess the data, for instance by using an imputer transformer in a pipeline or drop samples with missing values. See https://scikit-learn.org/stable/modules/impute.html You can find a list of all estimators that handle NaN values at the following page: https://scikit-learn.org/stable/modules/impute.html#estimators-that-handle-nan-values

          sdata.table.obsm['spatial']

          array([[nan, nan],
          [nan, nan],
          [nan, nan],
          ...,
          [nan, nan],
          [nan, nan],
          [nan, nan]])

          Metadata

          Metadata

          Labels

          No labels
          No labels

          Type

          No type

          Projects

          No projects

            Milestone

            No milestone

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
            Skip to content

            sdata.table.obsm['spatial'] object populated with Nan's #387

            Description

            @mkunst23

            Hi,

            I'm trying to run the squidpy integration with spatialdata but can't do any spatial calculations (i.e. neighborhood connectivities) because the sdata.table.obsm['spatial'] object is populated with Nan's.


            ValueError Traceback (most recent call last)
            Cell In[13], line 1
            ----> 1 sq.gr.spatial_neighbors(sdata.table)

            File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:160, in spatial_neighbors(adata, spatial_key, library_key, coord_type, n_neighs, radius, delaunay, n_rings, percentile, transform, set_diag, key_added, copy)
            158 Dst = block_diag([m[1] for m in mats], format="csr")[ixs, :][:, ixs]
            159 else:
            --> 160 Adj, Dst = _build_fun(adata)
            162 neighs_key = Key.uns.spatial_neighs(key_added)
            163 conns_key = Key.obsp.spatial_conn(key_added)

            File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:198, in _spatial_neighbor(adata, spatial_key, coord_type, n_neighs, radius, delaunay, n_rings, transform, set_diag, percentile)
            196 Adj, Dst = _build_grid(coords, n_neighs=n_neighs, n_rings=n_rings, delaunay=delaunay, set_diag=set_diag)
            197 elif coord_type == CoordType.GENERIC:
            --> 198 Adj, Dst = _build_connectivity(
            199 coords, n_neighs=n_neighs, radius=radius, delaunay=delaunay, return_distance=True, set_diag=set_diag
            200 )
            201 else:
            202 raise NotImplementedError(f"Coordinate type {coord_type} is not yet implemented.")

            File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:295, in _build_connectivity(coords, n_neighs, radius, delaunay, neigh_correct, set_diag, return_distance)
            293 r = 1 if radius is None else radius if isinstance(radius, (int, float)) else max(radius)
            294 tree = NearestNeighbors(n_neighbors=n_neighs, radius=r, metric="euclidean")
            --> 295 tree.fit(coords)
            297 if radius is None:
            298 results = tree.kneighbors()

            File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/base.py:1152, in _fit_context..decorator..wrapper(estimator, *args, **kwargs)
            1145 estimator._validate_params()
            1147 with config_context(
            1148 skip_parameter_validation=(
            1149 prefer_skip_nested_validation or global_skip_validation
            1150 )
            1151 ):
            -> 1152 return fit_method(estimator, *args, **kwargs)

            File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/neighbors/_unsupervised.py:175, in NearestNeighbors.fit(self, X, y)
            154 @_fit_context(
            155 # NearestNeighbors.metric is not validated yet
            156 prefer_skip_nested_validation=False
            157 )
            158 def fit(self, X, y=None):
            159 """Fit the nearest neighbors estimator from the training dataset.
            160
            161 Parameters
            (...)
            173 The fitted nearest neighbors estimator.
            174 """
            --> 175 return self._fit(X)

            File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/neighbors/_base.py:498, in NeighborsBase._fit(self, X, y)
            496 else:
            497 if not isinstance(X, (KDTree, BallTree, NeighborsBase)):
            --> 498 X = self._validate_data(X, accept_sparse="csr", order="C")
            500 self._check_algorithm_metric()
            501 if self.metric_params is None:

            File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/base.py:605, in BaseEstimator._validate_data(self, X, y, reset, validate_separately, cast_to_ndarray, **check_params)
            603 out = X, y
            604 elif not no_val_X and no_val_y:
            --> 605 out = check_array(X, input_name="X", **check_params)
            606 elif no_val_X and not no_val_y:
            607 out = _check_y(y, **check_params)

            File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:957, in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)
            951 raise ValueError(
            952 "Found array with dim %d. %s expected <= 2."
            953 % (array.ndim, estimator_name)
            954 )
            956 if force_all_finite:
            --> 957 _assert_all_finite(
            958 array,
            959 input_name=input_name,
            960 estimator_name=estimator_name,
            961 allow_nan=force_all_finite == "allow-nan",
            962 )
            964 if ensure_min_samples > 0:
            965 n_samples = _num_samples(array)

            File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:122, in _assert_all_finite(X, allow_nan, msg_dtype, estimator_name, input_name)
            119 if first_pass_isfinite:
            120 return
            --> 122 _assert_all_finite_element_wise(
            123 X,
            124 xp=xp,
            125 allow_nan=allow_nan,
            126 msg_dtype=msg_dtype,
            127 estimator_name=estimator_name,
            128 input_name=input_name,
            129 )

            File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:171, in _assert_all_finite_element_wise(X, xp, allow_nan, msg_dtype, estimator_name, input_name)
            154 if estimator_name and input_name == "X" and has_nan_error:
            155 # Improve the error message on how to handle missing values in
            156 # scikit-learn.
            157 msg_err += (
            158 f"\n{estimator_name} does not accept missing values"
            159 " encoded as NaN natively. For supervised learning, you might want"
            (...)
            169 "#estimators-that-handle-nan-values"
            170 )
            --> 171 raise ValueError(msg_err)

            ValueError: Input X contains NaN.
            NearestNeighbors does not accept missing values encoded as NaN natively. For supervised learning, you might want to consider sklearn.ensemble.HistGradientBoostingClassifier and Regressor which accept missing values encoded as NaNs natively. Alternatively, it is possible to preprocess the data, for instance by using an imputer transformer in a pipeline or drop samples with missing values. See https://scikit-learn.org/stable/modules/impute.html You can find a list of all estimators that handle NaN values at the following page: https://scikit-learn.org/stable/modules/impute.html#estimators-that-handle-nan-values

            sdata.table.obsm['spatial']

            array([[nan, nan],
            [nan, nan],
            [nan, nan],
            ...,
            [nan, nan],
            [nan, nan],
            [nan, nan]])

            Metadata

            Metadata

            Labels

            No labels
            No labels

            Type

            No type

            Projects

            No projects

              Milestone

              No milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              sdata.table.obsm['spatial'] object populated with Nan's #387

              Description

              @mkunst23

              Hi,

              I'm trying to run the squidpy integration with spatialdata but can't do any spatial calculations (i.e. neighborhood connectivities) because the sdata.table.obsm['spatial'] object is populated with Nan's.


              ValueError Traceback (most recent call last)
              Cell In[13], line 1
              ----> 1 sq.gr.spatial_neighbors(sdata.table)

              File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:160, in spatial_neighbors(adata, spatial_key, library_key, coord_type, n_neighs, radius, delaunay, n_rings, percentile, transform, set_diag, key_added, copy)
              158 Dst = block_diag([m[1] for m in mats], format="csr")[ixs, :][:, ixs]
              159 else:
              --> 160 Adj, Dst = _build_fun(adata)
              162 neighs_key = Key.uns.spatial_neighs(key_added)
              163 conns_key = Key.obsp.spatial_conn(key_added)

              File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:198, in _spatial_neighbor(adata, spatial_key, coord_type, n_neighs, radius, delaunay, n_rings, transform, set_diag, percentile)
              196 Adj, Dst = _build_grid(coords, n_neighs=n_neighs, n_rings=n_rings, delaunay=delaunay, set_diag=set_diag)
              197 elif coord_type == CoordType.GENERIC:
              --> 198 Adj, Dst = _build_connectivity(
              199 coords, n_neighs=n_neighs, radius=radius, delaunay=delaunay, return_distance=True, set_diag=set_diag
              200 )
              201 else:
              202 raise NotImplementedError(f"Coordinate type {coord_type} is not yet implemented.")

              File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:295, in _build_connectivity(coords, n_neighs, radius, delaunay, neigh_correct, set_diag, return_distance)
              293 r = 1 if radius is None else radius if isinstance(radius, (int, float)) else max(radius)
              294 tree = NearestNeighbors(n_neighbors=n_neighs, radius=r, metric="euclidean")
              --> 295 tree.fit(coords)
              297 if radius is None:
              298 results = tree.kneighbors()

              File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/base.py:1152, in _fit_context..decorator..wrapper(estimator, *args, **kwargs)
              1145 estimator._validate_params()
              1147 with config_context(
              1148 skip_parameter_validation=(
              1149 prefer_skip_nested_validation or global_skip_validation
              1150 )
              1151 ):
              -> 1152 return fit_method(estimator, *args, **kwargs)

              File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/neighbors/_unsupervised.py:175, in NearestNeighbors.fit(self, X, y)
              154 @_fit_context(
              155 # NearestNeighbors.metric is not validated yet
              156 prefer_skip_nested_validation=False
              157 )
              158 def fit(self, X, y=None):
              159 """Fit the nearest neighbors estimator from the training dataset.
              160
              161 Parameters
              (...)
              173 The fitted nearest neighbors estimator.
              174 """
              --> 175 return self._fit(X)

              File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/neighbors/_base.py:498, in NeighborsBase._fit(self, X, y)
              496 else:
              497 if not isinstance(X, (KDTree, BallTree, NeighborsBase)):
              --> 498 X = self._validate_data(X, accept_sparse="csr", order="C")
              500 self._check_algorithm_metric()
              501 if self.metric_params is None:

              File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/base.py:605, in BaseEstimator._validate_data(self, X, y, reset, validate_separately, cast_to_ndarray, **check_params)
              603 out = X, y
              604 elif not no_val_X and no_val_y:
              --> 605 out = check_array(X, input_name="X", **check_params)
              606 elif no_val_X and not no_val_y:
              607 out = _check_y(y, **check_params)

              File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:957, in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)
              951 raise ValueError(
              952 "Found array with dim %d. %s expected <= 2."
              953 % (array.ndim, estimator_name)
              954 )
              956 if force_all_finite:
              --> 957 _assert_all_finite(
              958 array,
              959 input_name=input_name,
              960 estimator_name=estimator_name,
              961 allow_nan=force_all_finite == "allow-nan",
              962 )
              964 if ensure_min_samples > 0:
              965 n_samples = _num_samples(array)

              File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:122, in _assert_all_finite(X, allow_nan, msg_dtype, estimator_name, input_name)
              119 if first_pass_isfinite:
              120 return
              --> 122 _assert_all_finite_element_wise(
              123 X,
              124 xp=xp,
              125 allow_nan=allow_nan,
              126 msg_dtype=msg_dtype,
              127 estimator_name=estimator_name,
              128 input_name=input_name,
              129 )

              File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:171, in _assert_all_finite_element_wise(X, xp, allow_nan, msg_dtype, estimator_name, input_name)
              154 if estimator_name and input_name == "X" and has_nan_error:
              155 # Improve the error message on how to handle missing values in
              156 # scikit-learn.
              157 msg_err += (
              158 f"\n{estimator_name} does not accept missing values"
              159 " encoded as NaN natively. For supervised learning, you might want"
              (...)
              169 "#estimators-that-handle-nan-values"
              170 )
              --> 171 raise ValueError(msg_err)

              ValueError: Input X contains NaN.
              NearestNeighbors does not accept missing values encoded as NaN natively. For supervised learning, you might want to consider sklearn.ensemble.HistGradientBoostingClassifier and Regressor which accept missing values encoded as NaNs natively. Alternatively, it is possible to preprocess the data, for instance by using an imputer transformer in a pipeline or drop samples with missing values. See https://scikit-learn.org/stable/modules/impute.html You can find a list of all estimators that handle NaN values at the following page: https://scikit-learn.org/stable/modules/impute.html#estimators-that-handle-nan-values

              sdata.table.obsm['spatial']

              array([[nan, nan],
              [nan, nan],
              [nan, nan],
              ...,
              [nan, nan],
              [nan, nan],
              [nan, nan]])

              Metadata

              Metadata

              Labels

              No labels
              No labels

              Type

              No type

              Projects

              No projects

                Milestone

                No milestone

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions

                , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                Skip to content

                sdata.table.obsm['spatial'] object populated with Nan's #387

                Description

                @mkunst23

                Hi,

                I'm trying to run the squidpy integration with spatialdata but can't do any spatial calculations (i.e. neighborhood connectivities) because the sdata.table.obsm['spatial'] object is populated with Nan's.


                ValueError Traceback (most recent call last)
                Cell In[13], line 1
                ----> 1 sq.gr.spatial_neighbors(sdata.table)

                File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:160, in spatial_neighbors(adata, spatial_key, library_key, coord_type, n_neighs, radius, delaunay, n_rings, percentile, transform, set_diag, key_added, copy)
                158 Dst = block_diag([m[1] for m in mats], format="csr")[ixs, :][:, ixs]
                159 else:
                --> 160 Adj, Dst = _build_fun(adata)
                162 neighs_key = Key.uns.spatial_neighs(key_added)
                163 conns_key = Key.obsp.spatial_conn(key_added)

                File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:198, in _spatial_neighbor(adata, spatial_key, coord_type, n_neighs, radius, delaunay, n_rings, transform, set_diag, percentile)
                196 Adj, Dst = _build_grid(coords, n_neighs=n_neighs, n_rings=n_rings, delaunay=delaunay, set_diag=set_diag)
                197 elif coord_type == CoordType.GENERIC:
                --> 198 Adj, Dst = _build_connectivity(
                199 coords, n_neighs=n_neighs, radius=radius, delaunay=delaunay, return_distance=True, set_diag=set_diag
                200 )
                201 else:
                202 raise NotImplementedError(f"Coordinate type {coord_type} is not yet implemented.")

                File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/squidpy/gr/_build.py:295, in _build_connectivity(coords, n_neighs, radius, delaunay, neigh_correct, set_diag, return_distance)
                293 r = 1 if radius is None else radius if isinstance(radius, (int, float)) else max(radius)
                294 tree = NearestNeighbors(n_neighbors=n_neighs, radius=r, metric="euclidean")
                --> 295 tree.fit(coords)
                297 if radius is None:
                298 results = tree.kneighbors()

                File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/base.py:1152, in _fit_context..decorator..wrapper(estimator, *args, **kwargs)
                1145 estimator._validate_params()
                1147 with config_context(
                1148 skip_parameter_validation=(
                1149 prefer_skip_nested_validation or global_skip_validation
                1150 )
                1151 ):
                -> 1152 return fit_method(estimator, *args, **kwargs)

                File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/neighbors/_unsupervised.py:175, in NearestNeighbors.fit(self, X, y)
                154 @_fit_context(
                155 # NearestNeighbors.metric is not validated yet
                156 prefer_skip_nested_validation=False
                157 )
                158 def fit(self, X, y=None):
                159 """Fit the nearest neighbors estimator from the training dataset.
                160
                161 Parameters
                (...)
                173 The fitted nearest neighbors estimator.
                174 """
                --> 175 return self._fit(X)

                File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/neighbors/_base.py:498, in NeighborsBase._fit(self, X, y)
                496 else:
                497 if not isinstance(X, (KDTree, BallTree, NeighborsBase)):
                --> 498 X = self._validate_data(X, accept_sparse="csr", order="C")
                500 self._check_algorithm_metric()
                501 if self.metric_params is None:

                File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/base.py:605, in BaseEstimator._validate_data(self, X, y, reset, validate_separately, cast_to_ndarray, **check_params)
                603 out = X, y
                604 elif not no_val_X and no_val_y:
                --> 605 out = check_array(X, input_name="X", **check_params)
                606 elif no_val_X and not no_val_y:
                607 out = _check_y(y, **check_params)

                File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:957, in check_array(array, accept_sparse, accept_large_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, estimator, input_name)
                951 raise ValueError(
                952 "Found array with dim %d. %s expected <= 2."
                953 % (array.ndim, estimator_name)
                954 )
                956 if force_all_finite:
                --> 957 _assert_all_finite(
                958 array,
                959 input_name=input_name,
                960 estimator_name=estimator_name,
                961 allow_nan=force_all_finite == "allow-nan",
                962 )
                964 if ensure_min_samples > 0:
                965 n_samples = _num_samples(array)

                File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:122, in _assert_all_finite(X, allow_nan, msg_dtype, estimator_name, input_name)
                119 if first_pass_isfinite:
                120 return
                --> 122 _assert_all_finite_element_wise(
                123 X,
                124 xp=xp,
                125 allow_nan=allow_nan,
                126 msg_dtype=msg_dtype,
                127 estimator_name=estimator_name,
                128 input_name=input_name,
                129 )

                File /allen/programs/celltypes/workgroups/rnaseqanalysis/mFISH/michaelkunst/miniconda3/envs/SpatialData/lib/python3.10/site-packages/sklearn/utils/validation.py:171, in _assert_all_finite_element_wise(X, xp, allow_nan, msg_dtype, estimator_name, input_name)
                154 if estimator_name and input_name == "X" and has_nan_error:
                155 # Improve the error message on how to handle missing values in
                156 # scikit-learn.
                157 msg_err += (
                158 f"\n{estimator_name} does not accept missing values"
                159 " encoded as NaN natively. For supervised learning, you might want"
                (...)
                169 "#estimators-that-handle-nan-values"
                170 )
                --> 171 raise ValueError(msg_err)

                ValueError: Input X contains NaN.
                NearestNeighbors does not accept missing values encoded as NaN natively. For supervised learning, you might want to consider sklearn.ensemble.HistGradientBoostingClassifier and Regressor which accept missing values encoded as NaNs natively. Alternatively, it is possible to preprocess the data, for instance by using an imputer transformer in a pipeline or drop samples with missing values. See https://scikit-learn.org/stable/modules/impute.html You can find a list of all estimators that handle NaN values at the following page: https://scikit-learn.org/stable/modules/impute.html#estimators-that-handle-nan-values

                sdata.table.obsm['spatial']

                array([[nan, nan],
                [nan, nan],
                [nan, nan],
                ...,
                [nan, nan],
                [nan, nan],
                [nan, nan]])

                Metadata

                Metadata

                Labels

                No labels
                No labels

                Type

                No type

                Projects

                No projects

                  Milestone

                  No milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions