小编csg*_*136的帖子

在xarray中导入和解码数据集,以避免_FillValue和missing_value冲突

当使用xarray open_dataset或open_mfdataset加载NARR netcdf数据集(例如ftp://ftp.cdc.noaa.gov/Datasets/NARR/monolevel/air.2m.2010.nc)时,xarray返回有关“与_FillValue和missing_values”。

输入:

ds = xarray.open_dataset('air.2m.2010.nc')

产生此错误:

ValueError: ('Discovered conflicting _FillValue and missing_value. Considering opening the offending dataset using decode_cf=False, corrected the attributes', 'and decoding explicitly using xray.conventions.decode_cf(ds)')

使用建议打开时:

ds = xarray.open_dataset('air.2m.2010.nc',decode_cf=False)

数据集已打开,但变量,时间,坐标等未解码(显然)。xarray.decode_cf(ds)显式使用似乎无法成功解码数据集,因为会遇到相同的错误。

我相信会出现此错误,因为NARR数据集是Lambert Conformal,因此由于xarray打开网格时的网格形状而导致一些缺失值,并且由于某些原因,这与填充值冲突。

在xarray中打开和解码此文件的最佳方法是什么?

注意:我已经能够使用netcdf4-python打开和解码,但是我希望能够在xarray中执行此操作,以利用dask提供的核心计算功能。

python netcdf python-xarray

6
推荐指数
2
解决办法
642
查看次数

在保持价值关联的同时对熊猫进行重新取样

从这样的事情开始:

from pandas import DataFrame
time = np.array(('2015-08-01T00:00:00','2015-08-01T12:00:00'),dtype='datetime64[ns]')
heat_index = np.array([101,103])
air_temperature = np.array([96,95])

df = DataFrame({'heat_index':heat_index,'air_temperature':air_temperature},index=time)
Run Code Online (Sandbox Code Playgroud)

产生这个df:

                     air_temperature    heat_index
2015-08-01 07:00:00  96                 101
2015-08-01 19:00:00  95                 103
Run Code Online (Sandbox Code Playgroud)

然后每天重新采样:

df_daily = df.resample('24H',how='max')
Run Code Online (Sandbox Code Playgroud)

为此得到df_daily:

            air_temperature     heat_index
2015-08-01  96                  103
Run Code Online (Sandbox Code Playgroud)

因此,通过how='max'每24小时使用pandas重新采样重新采样,从每列中获取该时间段内的最大值.

但正如你所看到的看着df输出2015-08-01,当天的最大热指数(发生在19:00:00)不相关的空气温度发生在同一时间.也就是说,在空气温度为95°F时引起103°的热指数.这种关联通过重新取样而丢失,我们最终会从一天中的不同时间看到空气温度.

有没有办法只重新采样一列,并将值保留在同一索引的另一列中?所以最终结果如下:

            air_temperature     heat_index
2015-08-01  95                  103
Run Code Online (Sandbox Code Playgroud)

我的第一个猜测就是重新对该heat_index列进行重新采样......

df_daily = df.resample('24H',how={'heat_index':'max'})
Run Code Online (Sandbox Code Playgroud)

要得到...

            air_temperature
2015-08-01  103
Run Code Online (Sandbox Code Playgroud)

...然后尝试从那里做某种DataFrame.loc或DataFrame.ix,但一直没有成功.关于如何在重新采样后找到相关值的任何想法(例如,找到与air_temperature后来发现的最大值同时发生的值heat_index)?

python datetime pandas

5
推荐指数
1
解决办法
1944
查看次数

标签 统计

python ×2

datetime ×1

netcdf ×1

pandas ×1

python-xarray ×1