gpt4 book ai didi

python - 从 netcdf 文件中获取每个月的小时平均值

转载 作者:太空狗 更新时间:2023-10-29 20:24:59 25 4
gpt4 key购买 nike

我有一个 netCDF 文件,其时间维度包含 2 年按小时计算的数据。我想对它进行平均以获得每个月一天中每个小时的每小时平均值。我试过这个:

import xarray as xr
ds = xr.open_mfdataset('ecmwf_usa_2015.nc')
ds.groupby(['time.month', 'time.hour']).mean('time')

但是我得到这个错误:

*** TypeError: `group` must be an xarray.DataArray or the name of an xarray variable or dimension

我该如何解决这个问题?如果我这样做:

ds.groupby('time.month', 'time.hour').mean('time')

我没有收到错误,但结果的时间维度为 12(每个月一个值),而我想要每个月的每小时平均值,即 12 个月中每个月有 24 个值。此处提供数据:https://www.dropbox.com/s/yqgg80wn8bjdksy/ecmwf_usa_2015.nc?dl=0

最佳答案

您收到类型错误:group必须是 xarray.DataArray 或 xarray 变量或维度的名称 因为 ds.groupby() 应该采用 xarray 数据集变量或数组,您传递了一个变量列表。

您有两个选择:

1。 xarray bins --> 按小时分组

按文档引用组 group by documentation并将数据集转换为 splitsbins然后申请groupby('time.hour')

这是因为按月应用 groupby,然后按小时一个一个地应用 groupby 或一起应用会聚合所有数据。如果您将它们分成月份数据,您将应用分组依据 - 每个月的平均值。

您可以尝试文档中提到的这种方法:

GroupBy: split-apply-combine

xarray supports “group by” operations with the same API as pandas to implement the split-apply-combine strategy:

  • Split your data into multiple independent groups. => Split them by months using groupby_bins
  • Apply some function to each group. => apply group by
  • Combine your groups back into a single data object. **apply aggregate function mean('time')

2。将其转换为 pandas dataframe 并使用 group by

警告:并非所有的 netcdfs 都可以转换为 panda dataframe,转换时可能会丢失元数据。

通过 df = ds.to_dataframe() 将 ds 转换为 pandas 数据帧并使用 根据需要使用 pandas.Grouper 进行分组喜欢

df.set_index('time').groupby([pd.Grouper(freq='1M'), 't2m']).mean()

注意:我看到了几个关于 pandas.TimeGrouper 的答案但它已被弃用,必须使用 pandas.Grouper现在。

由于您的数据集太大并且问题没有最小化数据并且处理它会消耗大量资源我建议在 pandas 上查看这些示例

  1. group by weekdays
  2. group by time
  3. groupby-date-range-depending-on-each-row
  4. group-and-count-rows-by-month-and-year

关于python - 从 netcdf 文件中获取每个月的小时平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49620140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com