Python 打开具有不同时间坐标长度的多个文件

Python 打开具有不同时间坐标长度的多个文件,python,time-series,netcdf,python-xarray,Python,Time Series,Netcdf,Python Xarray,我有两个(更多)netCDF文件,我想使用xarray中的open_mfdataset函数动态连接它们。如果我使用open_dataset单独打开它们,则打印的结构如下: Dimensions: (lat: 103, lon: 241, time: 365) Coordinates: * lon (lon) float64 5.75 5.771 5.792 5.812 5.833 5.854 5.875 5.896 ... * lat (lat) float64 4

我有两个(更多)netCDF文件,我想使用xarray中的
open_mfdataset
函数动态连接它们。如果我使用
open_dataset
单独打开它们,则打印的结构如下:

Dimensions:  (lat: 103, lon: 241, time: 365)
Coordinates:
  * lon      (lon) float64 5.75 5.771 5.792 5.812 5.833 5.854 5.875 5.896 ...
  * lat      (lat) float64 45.75 45.77 45.79 45.81 45.83 45.85 45.88 45.9 ...
  * time     (time) datetime64[ns] 2014-01-01 2014-01-02 2014-01-03 ...
Data variables:
    TabsD    (time, lat, lon) float64 nan nan nan nan nan nan nan nan nan ...
对于第一个文件,以及

Dimensions:  (lat: 103, lon: 241, time: 31)
Coordinates:
  * lon      (lon) float64 5.75 5.771 5.792 5.812 5.833 5.854 5.875 5.896 ...
  * lat      (lat) float64 45.75 45.77 45.79 45.81 45.83 45.85 45.87 45.9 ...
  * time     (time) datetime64[ns] 2015-01-01 2015-01-02 2015-01-03 ...
Data variables:
    TabsD    (time, lat, lon) float64 nan nan nan nan nan nan nan nan nan ...
第二次。现在的问题是,当我将文件名放入
flist
并执行
data=xr.open\u mfdataset(flist,concat\u dim='time',cache=False)
:

回溯(最近一次呼叫最后一次):
文件“C:\Program Files(x86)\JetBrains\PyCharm Community Edition 2016.3.2\helpers\pydev\pydevd.py”,第1591行,在
globals=debugger.run(setup['file'],None,None,is_模块)
文件“C:\Program Files(x86)\JetBrains\PyCharm Community Edition 2016.3.2\helpers\pydev\pydevd.py”,第1018行,正在运行
pydev_imports.execfile(文件、全局、局部)#执行脚本
文件“C:\Program Files(x86)\JetBrains\PyCharm社区版2016.3.2\helpers\pydev\\u pydev\u imps\\u pydev\u execfile.py”,第18行,在execfile中
exec(编译(内容+“\n”,文件,'exec'),全局,loc)
文件“C:/Users/*/Documents/myfile.py”,第110行,在
data=xr.open\u mfdataset(flist,concat\u dim='time',cache=False)
文件“C:\Program Files\Anaconda3\lib\site packages\xarray\backends\api.py”,第514行,在OpenMFU数据集中
组合=自动组合(数据集,concat\u dim=concat\u dim,compat=compat)
文件“C:\Program Files\Anaconda3\lib\site packages\xarray\core\combine.py”,第396行,在自动合并中
连接=[[分组中ds的自动连接(ds,dim=dim)]
文件“C:\Program Files\Anaconda3\lib\site packages\xarray\core\combine.py”,第396行,在
连接=[[分组中ds的自动连接(ds,dim=dim)]
文件“C:\Program Files\Anaconda3\lib\site packages\xarray\core\combine.py”,第332行,在自动目录中
返回concat(数据集,dim=dim)
文件“C:\Program Files\Anaconda3\lib\site packages\xarray\core\combine.py”,第120行,在concat中
返回f(对象、尺寸、数据变量、坐标、坐标、位置)
文件“C:\Program Files\Anaconda3\lib\site packages\xarray\core\combine.py”,第273行,位于数据集目录中
组合=concat_变量(变量、尺寸、位置)
concat中的文件“C:\Program Files\Anaconda3\lib\site packages\xarray\core\variable.py”,第1442行
返回变量.concat(变量、尺寸、位置、快捷方式)
concat中的文件“C:\Program Files\Anaconda3\lib\site packages\xarray\core\variable.py”,第998行
数据=duck\u数组\u ops.连接(数组,轴=轴)
文件“C:\Program Files\Anaconda3\lib\site packages\xarray\core\duck\u array\u ops.py”,第48行,在f中
返回getattr(模块,名称)(*args,**kwargs)
文件“C:\Program Files\Anaconda3\lib\site packages\dask\array\core.py”,第1871行,串联
提升值错误(“块形状不对齐”)
ValueError:块形状未对齐
我已经试过了:

  • 要设置
    块={'time':10}
    (30、40、100等…)
  • 要设置
    chunks={'lat':10,'lon':10}
  • 要检查时间跨度之间是否存在间隙:否
结果基本相同


这里有什么诀窍?

你描述的行为不应该发生

我的猜测是,您的一些文件实际上具有不同的维度大小,但您从dask收到一条无信息的错误消息


您描述的错误消息不再出现在dask的最新版本中,因此这种行为也有可能已被修复。请更新至xarray/dask的最新版本,然后重试。

您描述的行为不应发生

我的猜测是,您的一些文件实际上具有不同的维度大小,但您从dask收到一条无信息的错误消息


您描述的错误消息不再出现在dask的最新版本中,因此这种行为也有可能已被修复。请更新至xarray/dask的最新版本,然后再试一次。

我不知道netcdf,但您不能单独读取文件并在以后连接数据吗?这是可能的,但实际上我有150个相当大的文件,因此我选择了
打开MFU数据集
,它依赖于处理大量数据的
dask
模块。dask不能连接数据集?我不确定我是否明白你的意思。实际上,我不想深入研究dask,据我所知,级联也应该在xarray中工作……我建议使用NCO来代替这种类型的级联。我不知道netcdf,但你不能单独读取文件,然后连接数据吗?这是可能的,但实际上我有150个相当大的文件,所以我选择了
open_mfdataset
,它依赖于处理大量数据的
dask
模块。dask不能连接数据集?我不确定我是否明白你的意思。实际上,我不想深入研究dask,据我所知,级联也应该在xarray中工作……我建议使用NCO来代替这种类型的级联。感谢@shoyer,更新到dask 0.15确实使错误消失了。现在文件被合并,但是,由于lat/lon中的精度问题,尺寸几乎增加了一倍。在xr.Dataset的表示中,浮动似乎是相同的,但比较几乎只产生“False”。xarray中是否有方法匹配最接近的数字?是的,但您需要使用
xarray单独打开文件。打开_dataset()
,使用
reindex()
reindex_like()
(使用
method='nearray'
)重新索引,然后使用
xarray.concat()
手动连接它们。谢谢,这帮了大忙!我不确定现在是将答案标记为正确,还是最好删除该问题,因为我担心实际问题出在我的数据中……;-)感谢@shoyer,更新到dask 0.15确实使错误消失了。现在
Traceback (most recent call last):
  File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition    2016.3.2\helpers\pydev\pydevd.py", line 1591, in <module>
    globals = debugger.run(setup['file'], None, None, is_module)
  File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 2016.3.2\helpers\pydev\pydevd.py", line 1018, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Program Files (x86)\JetBrains\PyCharm Community Edition 2016.3.2\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/Users/*/Documents/myfile.py", line 110, in <module>
    data = xr.open_mfdataset(flist, concat_dim='time', cache=False) 
  File "C:\Program Files\Anaconda3\lib\site-packages\xarray\backends\api.py", line 514, in open_mfdataset
    combined = auto_combine(datasets, concat_dim=concat_dim, compat=compat)
  File "C:\Program Files\Anaconda3\lib\site-packages\xarray\core\combine.py", line 396, in auto_combine
    concatenated = [_auto_concat(ds, dim=dim) for ds in grouped]
  File "C:\Program Files\Anaconda3\lib\site-packages\xarray\core\combine.py", line 396, in <listcomp>
    concatenated = [_auto_concat(ds, dim=dim) for ds in grouped]
  File "C:\Program Files\Anaconda3\lib\site-packages\xarray\core\combine.py", line 332, in _auto_concat
    return concat(datasets, dim=dim)
  File "C:\Program Files\Anaconda3\lib\site-packages\xarray\core\combine.py", line 120, in concat
    return f(objs, dim, data_vars, coords, compat, positions)
  File "C:\Program Files\Anaconda3\lib\site-packages\xarray\core\combine.py", line 273, in _dataset_concat
    combined = concat_vars(vars, dim, positions)
  File "C:\Program Files\Anaconda3\lib\site-packages\xarray\core\variable.py", line 1442, in concat
    return Variable.concat(variables, dim, positions, shortcut)
  File "C:\Program Files\Anaconda3\lib\site-packages\xarray\core\variable.py", line 998, in concat
    data = duck_array_ops.concatenate(arrays, axis=axis)
  File "C:\Program Files\Anaconda3\lib\site-packages\xarray\core\duck_array_ops.py", line 48, in f
    return getattr(module, name)(*args, **kwargs)
  File "C:\Program Files\Anaconda3\lib\site-packages\dask\array\core.py", line 1871, in concatenate
    raise ValueError("Block shapes do not align")
ValueError: Block shapes do not align