bad*_*ley 4 python python-xarray
我有一系列CSV格式的月度网格化数据集.我想阅读它们,添加几个维度,然后写入netcdf.我以前在使用xarray(xray)方面有很棒的经验,所以我想在这个任务中使用它.
我可以很容易地将它们变成2D DataArray,例如:
data = np.ones((360,720))
lats = np.arange(-89.75, 90, 0.5) * -1
lngs = np.arange(-179.75, 180, 0.5)
coords = {'lat': lats, 'lng':lngs}
da = xr.DataArray(data, coords=coords)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试添加另一个维度时,它将传达有关时间的信息(所有数据来自同一年/月),事情开始变得糟糕.
我试过两种破解方法:
1)将我的输入数据扩展为mxnx 1,类似于:
data = np.ones((360,720))
lats = np.arange(-89.75, 90, 0.5) * -1
lngs = np.arange(-179.75, 180, 0.5)
coords = {'lat': lats, 'lng':lngs}
data = data[:,:,np.newaxis]
Run Code Online (Sandbox Code Playgroud)
然后我按照上面的相同步骤,更新coords以包含第三个维度.
lats = np.arange(-89.75, 90, 0.5) * -1
lngs = np.arange(-179.75, 180, 0.5)
coords = {'lat': lats, 'lng':lngs}
coords['time'] = pd.datetime(year, month, day))
da = xr.DataArray(data, coords=coords)
da.to_dataset(name='variable_name')
Run Code Online (Sandbox Code Playgroud)
这对于创建DataArray很好 - 但是当我尝试转换为数据集(因此我可以写入netCDF)时,我收到有关'ValueError:Coordinate objects必须是1维'的错误
2)我尝试的第二种方法是将我的数据阵列,将其转换为数据帧,将索引设置为['lat','lng','time'],然后返回到数据集xr.Dataset.from_dataframe().我试过这个 - 但是在我杀死这个过程之前需要20多分钟.
有谁知道如何获得每月"时间"维度的数据集?
sho*_*yer 10
你的第一个例子非常接近:
lats = np.arange(-89.75, 90, 0.5) * -1
lngs = np.arange(-179.75, 180, 0.5)
coords = {'lat': lats, 'lng': lngs}
coords['time'] = [datetime.datetime(year, month, day)]
da = xr.DataArray(data, coords=coords, dims=['lat', 'lng', 'time'])
da.to_dataset(name='variable_name')
Run Code Online (Sandbox Code Playgroud)
你会发现我的版本有一些变化:
ValueError: Coordinate objects must be 1-dimensional试图告诉你的事情(顺便说一句 - 如果你有关于如何使错误信息更有帮助的想法,我全都耳朵!).dimsDataArray构造函数提供一个参数.传入(非有序)字典有点危险,因为迭代顺序无法保证.datetime.datetime而不是pd.datetime.后者只是前者的别名.另一个合理的方法是concat在将"时间"添加为标量坐标后使用一个项目的列表,例如,
lats = np.arange(-89.75, 90, 0.5) * -1
lngs = np.arange(-179.75, 180, 0.5)
coords = {'lat': lats, 'lng': lngs, 'time': datetime.datetime(year, month, day)}
da = xr.DataArray(data, coords=coords, dims=['lat', 'lng'])
expanded_da = xr.concat([da], 'time')
Run Code Online (Sandbox Code Playgroud)
这个版本很好地概括了很多天的数据连接 - 你只需要更长时间的DataArrays列表.根据我的经验,大多数时候,你首先想要额外维度的原因是能够沿着它连接.长度1尺寸不是很有用.
| 归档时间: |
|
| 查看次数: |
1607 次 |
| 最近记录: |