【问题标题】:Print out specific variables based on time index in xarray.Dataset根据 xarray.Dataset 中的时间索引打印出特定变量
【发布时间】:2021-04-02 22:51:24
【问题描述】:

我完全迷失了,不知道该怎么做。

我使用nc = xarray.open_dataset(...) 访问了一个netCDF 文件。数据集包含以下内容:

<xarray.Dataset>
Dimensions:    (latitude: 121, longitude: 261, time: 8760)
Coordinates:
  * longitude  (longitude) float32 -20.0 -19.75 -19.5 -19.25 ... 44.5 44.75 45.0
  * latitude   (latitude) float32 55.0 54.75 54.5 54.25 ... 25.5 25.25 25.0
  * time       (time) datetime64[ns] 1979-01-01 ... 1979-12-31T23:00:00
Data variables:
    u10        (time, latitude, longitude) float32 ...
    v10        (time, latitude, longitude) float32 ...
    msl        (time, latitude, longitude) float32 ...
Attributes:
    Conventions:  CF-1.6
    history:      2020-11-24 08:15:21 GMT by grib_to_netcdf-2.16.0: /opt/ecmw...
    

使用nc.to_dataframe(),我能够打印出“更好看”的数据格式,如下所示:

从这里,我想打印出 9 月的 u10(以及后来的 v10)值,即从 1979-01-01 00:00:001979-10-01 00:00:00nc 的索引是一个

MultiIndex([(55.0, -20.0, '1979-01-01 00:00:00'), ... names=['latitude', 'longitude', 'time'], length=276649560)

我不确定 MultiIndex 部分是否有帮助。任何正确方向的帮助或提示都将非常感激,过去三天我一直坚持这一点。

【问题讨论】:

    标签: python dataframe dataset netcdf python-xarray


    【解决方案1】:

    欢迎来到堆栈溢出。这是how to ask a question.的指南

    我建议先学习xarray 的基础知识。他们有一些写得很好的examples关于如何开始。对于您的情况,请在 how to select data. 上查看这些示例

    你的情况

    t1 = '1979-01-01 00:00:00'
    t2 = '1979-10-01 00:00:00'
    ## select data from t1 till t2
    a = nc.u10.sel(time=slice(t1, t2))
    print(a)
    

    【讨论】:

    • 谢谢,这是数据选择的一个进步,但我仍然必须将它与nc.to_dataframe() 结合使用才能将其打印在列中而不是121 x 261 维度网格中。关于如何在不使用 dataframe 并使用 .to_csv 保存的情况下实现这一目标的任何提示?
    • 您只需执行nc.sel(time=slice(t1, t2)).to_dataframe(),您将只拥有选定时间范围的数据帧。有帮助吗?
    • @aLjeonjko 您是否只想保存一个网格点的值,例如; CSV 中的 55.0、-20.0?
    猜你喜欢
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 2012-01-25
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    相关资源
    最近更新 更多