【问题标题】:ValueError when transforming DataFrame to xarray (non-unique MultiIndex)将 DataFrame 转换为 xarray 时出现 ValueError(非唯一 MultiIndex)
【发布时间】:2021-12-12 19:35:50
【问题描述】:

我有两个 ncdf 文件,一个包含纬度/经度坐标,一个包含实际数据。坐标数组的每个单元格分别包含关于 lat 和 lon 的信息。我试图获得一个组合数据集(以便能够使用它),我也想对其进行子集化。因此,我使用xarray.open_dataset() 打开两个数据集,将它们转换为 pandas 数据框,并将数据列附加到带有坐标的数据框。之后我使用.between() 创建子集。我还使用.set_index() 将纬度/经度设置为新索引。到目前为止,一切都很好。下一步是将数据帧转换回xarray,然后将组合数据集写回ncdf,但是当我使用.to_xarray() 进行xarray 转换时,出现以下错误:

ValueError:无法转换具有非唯一 MultiIndex 的 DataFrame 进入 xarray

我找到了similar case,但那里提供的答案对我的情况没有意义。不可能有重复的坐标对。

我的代码如下:

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()

可以在here (79.3 mb) 找到这些文件,当然,我们将不胜感激。

【问题讨论】:

    标签: python dataframe netcdf python-xarray


    【解决方案1】:

    您的数据中似乎有 3 个维度:经度、纬度和高度。因此,您的代码中需要以下几行:

    dat_df['alt'] = geo_df['altitude']
    
    # Set new index
    dat_filter = dat_filter.set_index(['lat', 'lon', 'alt'])
    

    【讨论】:

    • 尽管添加了您的建议中的行,但错误仍然存​​在。
    • Xarray 要求空间和时间上的每个点都有一个值。您需要使它们独一无二
    猜你喜欢
    • 2023-03-28
    • 2020-03-29
    • 2017-04-28
    • 2020-05-27
    • 2022-07-22
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多