m0_67916622 2023-04-19 18:35 采纳率: 0%
浏览 31

xarray.dataset grib数据读取

在ecmwf下的气象数据然后利用xarray和cfgrib进行读取,先开始一直报错

data_ow_1 = xr.open_dataset(file_ocean_wave_1, engine=('cfgrib'))

skipping variable: paramId==140235 shortName='mdww'
Traceback (most recent call last):
  File "D:\anaconda\envs\program1\lib\site-packages\cfgrib\dataset.py", line 676, in build_dataset_components
    dict_merge(variables, coord_vars)
  File "D:\anaconda\envs\program1\lib\site-packages\cfgrib\dataset.py", line 607, in dict_merge
    raise DatasetBuildError(
cfgrib.dataset.DatasetBuildError: key present and new value is different: key='latitude' value=Variable(dimensions=('latitude',), data=array([60.  , 59.7

然后在网上找了好久,按坐标层次读取

data_ow_1 = xr.open_dataset(file_ocean_wave_1, engine=('cfgrib'),backend_kwargs={'filter_by_keys':{'typeOfLevel': 'meanSea'}})
<xarray.Dataset>
Dimensions:     (time: 744, latitude: 121, longitude: 720)
Coordinates:
    number      int32 ...
  * time        (time) datetime64[ns] 2019-05-01 ... 2019-05-31T23:00:00
    step        timedelta64[ns] ...
    meanSea     float64 ...
  * latitude    (latitude) float64 60.0 59.5 59.0 58.5 58.0 ... 1.5 1.0 0.5 0.0
  * longitude   (longitude) float64 -180.0 -179.5 -179.0 ... 178.5 179.0 179.5
    valid_time  (time) datetime64[ns] ...
Data variables:
    mdww        (time, latitude, longitude) float32 ...
    mpww        (time, latitude, longitude) float32 ...
    mwd         (time, latitude, longitude) float32 ...
    mwp         (time, latitude, longitude) float32 ...
    swh         (time, latitude, longitude) float32 ...
    shww        (time, latitude, longitude) float32 ...
Attributes:
    GRIB_edition:            1
    GRIB_centre:             ecmf
    GRIB_centreDescription:  European Centre for Medium-Range Weather Forecasts
    GRIB_subCentre:          0
    Conventions:             CF-1.7
    institution:             European Centre for Medium-Range Weather Forecasts
    history:                 2023-04-19T18:07 GRIB to CDM+CF via cfgrib-0.9.1...

我尝试着将读取的文件转为dataframe

new_data_clean_1 = pd.DataFrame([])
for i in data_h_index:
    if select_time[i].split('-')[0] == '2019':
        data_clean_1 = data_ow_1.sel(time=select_time[i], longitude=select_lon[i], latitude=select_lat[i],method='nearest')
       
        DT_1 = data_clean_1.to_pandas()
        print(DT_1)
outu10    0.345963
v10    0.389984
dtype: float64
u10   -0.416733
v10   -0.414703
dtype: float64
u10   -0.416733
v10   -0.414703
dtype: float64

这里u10 和v10被当作数据了
怎么才能将xarray.dataset转化为正常的列表,将u10,v10作为索引

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-04-20 16:05
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 以下回答来自chatgpt: 问题: 我在使用xarray和cfgrib读取ecmwf下的气象数据时遇到了问题。我尝试了按坐标层次读取,并将读取的文件转换成了dataframe格式。但我发现u10和v10被当作了数据量而不是索引。请问如何将xarray.dataset转化为正常的列表,并将u10和v10作为索引。请为我提供具体的解决方案,并使用简洁的语言和代码来解释。 解决方案: 首先,您需要理解xarray和cfgrib的使用。xarray是一个Python库,用于处理和分析多维数据,而cfgrib是一个用于GRIB文件处理的Python库。GRIB文件是一种广泛用于表达气象数据的文件格式,通常由气象预报模型输出。在这种情况下,您需要使用cfgrib来读取GRIB文件,然后使用xarray将数据集导入Python。 下面是一些具体的步骤,以帮助您正确读取和索引气象数据: 1. 首先,您需要安装xarray和cfgrib库,您可以使用以下命令在终端中安装它们: ``` pip install xarray[all] pip install cfgrib ``` 2. 接下来,您需要使用cfgrib库来打开GRIB文件。可以使用以下命令打开文件,并将其保存到一个名为“ds”的数据集中: ``` import cfgrib import xarray as xr ds = xr.open_dataset('path/to/grib/file', engine='cfgrib') ``` 3. 现在,您需要选择您感兴趣的变量(如u10和v10),并将其转换为DataFrame格式。您可以使用以下代码来做到这一点: ``` df = ds[['u10', 'v10']].to_dataframe() ``` 4. 现在,您需要将u10和v10列从数据框中移动到索引中。您可以使用以下命令来实现: ``` df = df.reset_index().set_index(['latitude','longitude','time','valid_time', 'step']).sort_index() ``` 5. 现在,您已经成功将u10和v10列作为索引添加到了数据帧中。此时,您可以直接使用DataFrame的loc方法来访问数据。例如,如果您要访问纬度为40、经度为50、时间为2021-01-01 12:00:00的u10数据,您可以使用以下代码: ``` df.loc[(40, 50, '2021-01-01 12:00:00', slice(None), slice(None)), 'u10'] ``` 以上就是如何使用xarray和cfgrib正确读取和索引气象数据的具体步骤。希望这可以帮助您解决您的问题。

    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 4月19日

悬赏问题

  • ¥15 平板录音机录音问题解决
  • ¥15 请问维特智能的安卓APP在手机上存储传感器数据后,如何找到它的存储路径?
  • ¥15 (SQL语句|查询结果翻了4倍)
  • ¥15 Odoo17操作下面代码的模块时出现没有'读取'来访问
  • ¥50 .net core 并发调用接口问题
  • ¥15 网上各种方法试过了,pip还是无法使用
  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启