Dataset.drop() no longer works with a set as an argument
See original GitHub issueMCVE Code Sample
# Your code here
#!/usr/bin/env python
import xarray
import numpy
ds = xarray.Dataset()
ds['x'] = ('x', numpy.linspace(0., 1., 100))
ds['y'] = ('y', numpy.linspace(0., 1., 50))
print(ds)
ds = ds.drop(set('x'))
print(ds)
Expected Output
<xarray.Dataset>
Dimensions: (x: 100, y: 50)
Coordinates:
* x (x) float64 0.0 0.0101 0.0202 0.0303 ... 0.9697 0.9798 0.9899 1.0
* y (y) float64 0.0 0.02041 0.04082 0.06122 ... 0.9592 0.9796 1.0
Data variables:
*empty*
<xarray.Dataset>
Dimensions: (y: 50)
Coordinates:
* y (y) float64 0.0 0.02041 0.04082 0.06122 ... 0.9592 0.9796 1.0
Data variables:
*empty*
Problem Description
In versions before xarray 0.14.1, the code above involving calls to Dataset.drop()
with a set
as an argument worked as expected. With the new release, the result is an error as shown below. This is breaking backwards compatibility with our software (MPAS-Analysis).
<xarray.Dataset>
Dimensions: (x: 100, y: 50)
Coordinates:
* x (x) float64 0.0 0.0101 0.0202 0.0303 ... 0.9697 0.9798 0.9899 1.0
* y (y) float64 0.0 0.02041 0.04082 0.06122 ... 0.9592 0.9796 1.0
Data variables:
*empty*
Traceback (most recent call last):
File "./drop_issue.py", line 10, in <module>
ds = ds.drop(set('x'))
File "/home/xylar/miniconda3/envs/test/lib/python3.7/site-packages/xarray/core/dataset.py", line 3643, in drop
return self.drop_sel(labels, errors=errors)
File "/home/xylar/miniconda3/envs/test/lib/python3.7/site-packages/xarray/core/dataset.py", line 3689, in drop_sel
labels = either_dict_or_kwargs(labels, labels_kwargs, "drop")
File "/home/xylar/miniconda3/envs/test/lib/python3.7/site-packages/xarray/core/utils.py", line 257, in either_dict_or_kwargs
"the first argument to .%s must be a dictionary" % func_name
ValueError: the first argument to .drop must be a dictionary
Output of xr.show_versions()
# Paste the output here xr.show_versions() here
INSTALLED VERSIONS
------------------
commit: None
python: 3.7.3 | packaged by conda-forge | (default, Jul 1 2019, 21:52:21)
[GCC 7.3.0]
python-bits: 64
OS: Linux
OS-release: 4.15.0-1063-oem
machine: x86_64
processor: x86_64
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8
LOCALE: en_US.UTF-8
libhdf5: 1.10.5
libnetcdf: 4.7.1
xarray: 0.14.1 pandas: 0.25.3 numpy: 1.17.3 scipy: 1.3.2 netCDF4: 1.5.3 pydap: None h5netcdf: None h5py: None Nio: None zarr: None cftime: 1.0.4.2 nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: 1.3.1 dask: 2.8.0 distributed: 2.8.0 matplotlib: 3.1.2 cartopy: 0.17.0 seaborn: None numbagg: None setuptools: 41.6.0.post20191101 pip: 19.3.1 conda: None pytest: 5.3.0 IPython: None sphinx: None
Issue Analytics
- State:
- Created 4 years ago
- Comments:15 (5 by maintainers)
Top Results From Across the Web
Pandas deleting row with df.drop doesn't work - Stack Overflow
While dropping new DataFrame returns. If you want to apply changes to the current DataFrame you have to specify inplace parameter. Option 1...
Read more >How to Use the Pandas Drop Technique - Sharp Sight
In this tutorial, I'll explain how to drop rows and columns from a dataframe using the Pandas drop method. I'll explain what the...
Read more >Pandas drop column : Different methods
For dropping multiple columns using the columns argument, you can pass a list of column names which are to be dropped.
Read more >How to drop one or multiple columns from Pandas Dataframe
This article explains how to drop or remove one or more columns from pandas dataframe along with various examples to get hands-on experience....
Read more >Why You Should Probably Never Use pandas inplace=True
As mentioned it's not just .replace() where the keyword parameter is available, you'll see it in a whole host of different methods, such...
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
the reason for
set
raising an error is that indrop
is_list_like(labels) or is_scalar(labels)
is used instead ofisinstance(labels, str) or not isinstance(labels, Iterable)
. Sinceis_list_like
explicitly checks fortuple
andlist
, passingset
obviously won’t call the right method.Ah, thanks very much! I’ll switch to using that syntax instead.