pull_requests: 396774100
This data as json
id | node_id | number | state | locked | title | user | body | created_at | updated_at | closed_at | merged_at | merge_commit_sha | assignee | milestone | draft | head | base | author_association | auto_merge | repo | url | merged_by |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
396774100 | MDExOlB1bGxSZXF1ZXN0Mzk2Nzc0MTAw | 3924 | closed | 0 | Coordinates passed to interp have nan values | 30388627 | ## Problem `Keyerror` when the coordinates passed to `interp` have nan value. ### Example ``` import numpy as np import xarray as xr da = xr.DataArray(np.sin(0.3 * np.arange(20).reshape(5, 4)), [('x', np.arange(5)), ('y', [0.1, 0.2, 0.3, 0.4])]) x = xr.DataArray([[0.5, np.nan], [1.5, 2.5]], dims=['z1', 'z2']) y = xr.DataArray([[0.15, 0.2], [np.nan, 0.35]], dims=['z1', 'z2']) da_nan = da.interp(x=x, y=y) ``` ### Output ``` E:\miniconda3\envs\satpy\lib\site-packages\pandas\core\indexes\base.py:2826: RuntimeWarning: invalid value encountered in less op(left_distances, right_distances) | (right_indexer == -1), Traceback (most recent call last): File "C:\Users\Xin\Desktop\test_none.py", line 10, in <module> da_nan = da.interp(x=x, y=y) File "E:\miniconda3\envs\satpy\lib\site-packages\xarray\core\dataarray.py", line 1365, in interp **coords_kwargs, File "E:\miniconda3\envs\satpy\lib\site-packages\xarray\core\dataset.py", line 2610, in interp variables[name] = missing.interp(var, var_indexers, method, **kwargs) File "E:\miniconda3\envs\satpy\lib\site-packages\xarray\core\missing.py", line 611, in interp var, indexes_coords = _localize(var, indexes_coords) File "E:\miniconda3\envs\satpy\lib\site-packages\xarray\core\missing.py", line 552, in _localize imin = index.get_loc(np.min(new_x.values), method="nearest") File "E:\miniconda3\envs\satpy\lib\site-packages\pandas\core\indexes\base.py", line 2654, in get_loc raise KeyError(key) KeyError: nan ``` ## Solution Use `np.nanmin` and `np.nanmax` in `index.get_loc()` ## Test ### Code ``` import numpy as np import xarray as xr da = xr.DataArray(np.sin(0.3 * np.arange(20).reshape(5, 4)), [('x', np.arange(5)), ('y', [0.1, 0.2, 0.3, 0.4])]) x = xr.DataArray([[0.5, np.nan], [1.5, 2.5]], dims=['z1', 'z2']) y = xr.DataArray([[0.15, 0.2], [np.nan, 0.35]], dims=['z1', 'z2']) da_nan = da.interp(x=x, y=y) x = xr.DataArray([[0.5, 1], [1.5, 2.5]], dims=['z1', 'z2']) y = xr.DataArray([[0.15, 0.2], [0.25, 0.35]], dims=['z1', 'z2']) da_nonan = da.interp(x=x, y=y) print('da_nan \n', da_nan) print('da_nonan \n', da_nonan) ``` ### Output ``` E:\miniconda3\envs\satpy\lib\site-packages\scipy\interpolate\interpolate.py:2539: RuntimeWarning: invalid value encountered in less out_of_bounds += x < grid[0] E:\miniconda3\envs\satpy\lib\site-packages\scipy\interpolate\interpolate.py:2540: RuntimeWarning: invalid value encountered in greater out_of_bounds += x > grid[-1] da_nan <xarray.DataArray (z1: 2, z2: 2)> array([[ 0.55626357, nan], [ nan, -0.46643289]]) Coordinates: x (z1, z2) float64 0.5 nan 1.5 2.5 y (z1, z2) float64 0.15 0.2 nan 0.35 Dimensions without coordinates: z1, z2 da_nonan <xarray.DataArray (z1: 2, z2: 2)> array([[ 0.55626357, 0.99749499], [ 0.63496063, -0.46643289]]) Coordinates: x (z1, z2) float64 0.5 1.0 1.5 2.5 y (z1, z2) float64 0.15 0.2 0.25 0.35 Dimensions without coordinates: z1, z2 ``` | 2020-04-01T05:46:54Z | 2020-08-27T08:51:32Z | 2020-08-27T08:51:32Z | 54d0b47d45fff64d5acb69a1225078944b61e80a | 0 | 26cf20353d6649d9448e1542feb389479222e8f9 | 7bf9df9d75c40bcbf2dd28c47204529a76561a3f | NONE | 13221727 | https://github.com/pydata/xarray/pull/3924 |
Links from other tables
- 0 rows from pull_requests_id in labels_pull_requests