id,node_id,number,title,user,state,locked,assignee,milestone,comments,created_at,updated_at,closed_at,author_association,active_lock_reason,draft,pull_request,body,reactions,performed_via_github_app,state_reason,repo,type 614275938,MDU6SXNzdWU2MTQyNzU5Mzg=,4045,Millisecond precision is lost on datetime64 during IO roundtrip,10676434,closed,0,,,9,2020-05-07T19:01:18Z,2021-01-03T23:39:04Z,2021-01-03T23:39:04Z,NONE,,,," I have millisecond-resolution time data as a coordinate on a DataArray. That data loses precision when round-tripping through disk. #### MCVE Code Sample [bug_data.p.zip](https://github.com/pydata/xarray/files/4595145/bug_data.p.zip) Unzip the data. It will result in a pickle file. ```python bug_data_path = '/path/to/unzipped/bug_data.p' tmp_path = '~/Desktop/test.nc' with open(bug_data_path, 'rb') as f: data = pickle.load(f) selector = dict(animal=0, timepoint=0, wavelength='410', pair=0) before_disk_ts = data.time.sel(**selector).values[()] data.time.encoding = {'units': 'microseconds since 1900-01-01', 'calendar': 'proleptic_gregorian'} data.to_netcdf(tmp_path) after_disk_ts = xr.load_dataarray(tmp_path).time.sel(**selector).values[()] print(f'before roundtrip: {before_disk_ts}') print(f' after roundtrip: {after_disk_ts}') ``` output: ``` before roundtrip: 2017-02-22T16:24:10.586000000 after roundtrip: 2017-02-22T16:24:10.585999872 ``` #### Expected Output ``` Before: 2017-02-22T16:24:10.586000000 After: 2017-02-22T16:24:10.586000000 ``` #### Problem Description As you can see, I lose millisecond precision in this data. (The same happens when I use millisecond in the encoding). #### Versions
Output of xr.show_versions() INSTALLED VERSIONS ------------------ commit: None python: 3.7.6 | packaged by conda-forge | (default, Jan 7 2020, 22:05:27) [Clang 9.0.1 ] python-bits: 64 OS: Darwin OS-release: 19.4.0 machine: x86_64 processor: i386 byteorder: little LC_ALL: None LANG: en_US.UTF-8 LOCALE: None.UTF-8 libhdf5: 1.10.5 libnetcdf: 4.7.3 xarray: 0.15.1 pandas: 1.0.1 numpy: 1.18.1 scipy: 1.4.1 netCDF4: 1.5.3 pydap: None h5netcdf: 0.8.0 h5py: 2.10.0 Nio: None zarr: None cftime: 1.0.4.2 nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: None dask: 2.11.0 distributed: 2.14.0 matplotlib: 3.1.3 cartopy: None seaborn: 0.10.0 numbagg: None setuptools: 45.2.0.post20200209 pip: 20.0.2 conda: None pytest: 5.3.5 IPython: 7.12.0 sphinx: 2.4.3
","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/4045/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,completed,13221727,issue 613717463,MDU6SXNzdWU2MTM3MTc0NjM=,4042,DataArray coordinates transformed into variables when saved to disk,10676434,closed,0,,,1,2020-05-07T01:51:36Z,2020-05-07T18:42:52Z,2020-05-07T18:42:52Z,NONE,,,," When I save my DataArray to disk using ``to_netcdf``, then try to reload it as a DataArray, it fails the roundtrip. When I load it as a DataSet, I see that the coordinates have been transformed into variables. Also, the attributes have disappeared. #### MCVE Code Sample [bug_data.p.zip](https://github.com/pydata/xarray/files/4590243/bug_data.p.zip) Unzip the file. It should be a pickle file. ```python import pickle import xarray as xr data = pickle.load(open('/path/to/bug_data.p', 'rb')) print(type(data) == xr.DataArray) # >>> True path = '/var/tmp/bug_data.nc' data.to_netcdf(path, format='NETCDF4', mode='w') # xr.open_dataarray(path) # fails due to multiple variables xr.open_dataset(path) # succeeds ``` #### Expected Output I expect ``xr.open_dataarray(path)`` to succeed, and for the result to be equal to ``data``. #### Problem Description The DataArray -> Disk -> DataArray roundtrip should be seamless. #### Versions
Output of xr.show_versions() INSTALLED VERSIONS ------------------ commit: None python: 3.7.6 | packaged by conda-forge | (default, Jan 7 2020, 22:05:27) [Clang 9.0.1 ] python-bits: 64 OS: Darwin OS-release: 19.4.0 machine: x86_64 processor: i386 byteorder: little LC_ALL: None LANG: en_US.UTF-8 LOCALE: en_US.ISO8859-1 libhdf5: 1.10.5 libnetcdf: 4.7.3 xarray: 0.15.1 pandas: 1.0.1 numpy: 1.18.1 scipy: 1.4.1 netCDF4: 1.5.3 pydap: None h5netcdf: 0.8.0 h5py: 2.10.0 Nio: None zarr: None cftime: 1.0.4.2 nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: None dask: 2.11.0 distributed: 2.14.0 matplotlib: 3.1.3 cartopy: None seaborn: 0.10.0 numbagg: None setuptools: 45.2.0.post20200209 pip: 20.0.2 conda: None pytest: 5.3.5 IPython: 7.12.0 sphinx: 2.4.3
","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/4042/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,completed,13221727,issue 605717342,MDU6SXNzdWU2MDU3MTczNDI=,3997,DataArray.to_netcdf breaks in filename-dependent manner,10676434,closed,0,,,3,2020-04-23T17:31:08Z,2020-05-07T02:10:44Z,2020-05-07T02:10:44Z,NONE,,,," Writing a DataArray to disk breaks if the filename is `test.nc`. I'm unsure if other names pose a similar problem. #### MCVE Code Sample ```python # load data into `imgs` >>> type(imgs) == xr.core.dataarray.DataArray True >>> filename = '/Users/sean/Desktop/test.nc' >>> imgs.to_netcdf(filename) >>> xr.open_dataarray(filename) --------------------------------------------------------------------------- ValueError Traceback (most recent call last) in 2 filename = '/Users/sean/Desktop/test.nc' 3 imgs.to_netcdf(filename) ----> 4 xr.open_dataarray(filename) ~/opt/anaconda3/envs/pharedox/lib/python3.7/site-packages/xarray/backends/api.py in open_dataarray(filename_or_obj, group, decode_cf, mask_and_scale, decode_times, autoclose, concat_characters, decode_coords, engine, chunks, lock, cache, drop_variables, backend_kwargs, use_cftime) 676 if len(dataset.data_vars) != 1: 677 raise ValueError( --> 678 ""Given file dataset contains more than one data "" 679 ""variable. Please read with xarray.open_dataset and "" 680 ""then select the variable you want."" ValueError: Given file dataset contains more than one data variable. Please read with xarray.open_dataset and then select the variable you want. >>> filename = '/Users/sean/Desktop/testing.nc' >>> imgs.to_netcdf(filename) >>> xr.open_dataarray(filename) ``` ![image](https://user-images.githubusercontent.com/10676434/80130304-f9f11300-855d-11ea-9ba3-1730068a6dca.png) #### Expected Output ![image](https://user-images.githubusercontent.com/10676434/80129938-70414580-855d-11ea-9f93-a83a878b0be2.png) #### Problem Description Saving the DataArray to a file called `test.nc` seems like it generates a DataSet with multiple variables? Or otherwise destroys the expected formatting for `xr.load_datarray`. #### Versions
Output of xr.show_versions() INSTALLED VERSIONS ------------------ commit: None python: 3.7.6 | packaged by conda-forge | (default, Jan 7 2020, 22:05:27) [Clang 9.0.1 ] python-bits: 64 OS: Darwin OS-release: 19.4.0 machine: x86_64 processor: i386 byteorder: little LC_ALL: None LANG: en_US.UTF-8 LOCALE: None.UTF-8 libhdf5: 1.10.5 libnetcdf: 4.7.3 xarray: 0.15.1 pandas: 1.0.1 numpy: 1.18.1 scipy: 1.4.1 netCDF4: 1.5.3 pydap: None h5netcdf: 0.8.0 h5py: 2.10.0 Nio: None zarr: None cftime: 1.0.4.2 nc_time_axis: None PseudoNetCDF: None rasterio: None cfgrib: None iris: None bottleneck: None dask: 2.11.0 distributed: 2.14.0 matplotlib: 3.1.3 cartopy: None seaborn: 0.10.0 numbagg: None setuptools: 45.2.0.post20200209 pip: 20.0.2 conda: None pytest: 5.3.5 IPython: 7.12.0 sphinx: 2.4.3
","{""url"": ""https://api.github.com/repos/pydata/xarray/issues/3997/reactions"", ""total_count"": 0, ""+1"": 0, ""-1"": 0, ""laugh"": 0, ""hooray"": 0, ""confused"": 0, ""heart"": 0, ""rocket"": 0, ""eyes"": 0}",,completed,13221727,issue