我有两个ncdf文件,一个包含lat/lon坐标,另一个包含实际数据。坐标阵列的每个单元格分别包含有关lat和lon的信息。我试图获得一个合并的数据集(以便能够使用它),我也想对其进行子集。因此,我使用xarray.open_dataset()打开两个数据集,将它们转换为熊猫数据,并将数据列附加到具有坐标的dataframe中。之后,我使用.between()创建子集。我还将lat/lon设置为.set_index()的新索引。到目前一切尚好。下一步是将dataframe转换回xarray,然后将合并的数据集写回ncdf,但是当我使用.to_xarray()进行xarray转换时,会得到以下错误:
ValueError:无法将具有非唯一MultiIndex的DataFrame转换为xarray
我找到了一个相似案例,但给出的答案对我的情况没有意义。不可能存在重复的坐标对。
我的代码如下:
import xarray as xr
geo_path = 'PATH/TO/geolocation.nc'
dat_path = 'PATH/TO/data.nc'
# Open datasets
geo_ds = xr.open_dataset(geo_path)
dat_ds = xr.open_dataset(dat_path)
# Transform to dataframe
geo_df = geo_ds.to_dataframe()
dat_df = dat_ds.to_dataframe()
# Add coordinates to the actual data
dat_df['lat'] = geo_df['lat']
dat_df['lon'] = geo_df['lon']
# Create subset
dat_filter = dat_df[(dat_df['lat'].between(60, 71) & dat_df['lon'].between(132, 138))]
# Set new index
dat_filter = dat_filter.set_index(['lat', 'lon'])
# Convert back to xarray
dat_filter.to_xarray()这些文件可以找到这里 (793mb),当然,任何帮助都是非常感谢的。
发布于 2021-10-27 17:42:10
数据中似乎有三个维度:经度、纬度和高度。因此,您将需要代码中的以下几行:
dat_df['alt'] = geo_df['altitude']
# Set new index
dat_filter = dat_filter.set_index(['lat', 'lon', 'alt'])https://stackoverflow.com/questions/69739871
复制相似问题