【发布时间】:2022-01-11 21:51:55
【问题描述】:
我的目标是从数据集中计算每日气候学,即通过平均所有年份来获得一年中每一天的海面温度 (SST)(例如,对于 1 月 1 日,所有 1 月 1 日的平均 SST 1982 年至 2018 年)。为此,我做了以下步骤:
数据准备步骤
这是两个数据集的 Drive 链接,以使代码可重现: link to datasets
首先,我加载两个数据集:
ds1 = xr.open_dataset('./anomaly_dss/archive_to2018.nc') #from 1982 to 2018
ds2 = xr.open_dataset('./anomaly_dss/realtime_from2018.nc') #from 2018 to present
然后我转换为 pandas 数据框并将两者合并为一个:
ds1 = ds1.where(ds1.time > np.datetime64('1982-01-01'), drop=True) # Grab all data since 1/1/1982
ds2 = ds2.where(ds2.time > ds1.time.max(), drop=True) # Grab all data since the end of the archive
# Convert to Pandas Dataframe
df1 = ds1.to_dataframe().reset_index().set_index('time')
df2 = ds2.to_dataframe().reset_index().set_index('time')
# Merge these datasets
df = df1.combine_first(df2)
到目前为止,这就是我的数据框的样子:
请注意,LAT,LON 来自 LAT(35,37.7), LON(-10,-5),必须保持这样
异常计算步骤
# Anomaly claculation
def standardize(x):
return (x - x.mean())/x.std()
# Calculate a daily average
df_daily = df.resample('1D').mean()
# Calculate the anomaly for each yearday
df_daily['anomaly'] = df_daily['analysed_sst'].groupby(df_daily.index.dayofyear).transform(standardize)
我得到以下数据框:
如您所见,我获得了所有三个变量的平均值。
问题
由于我想在地图上绘制气候数据,我不希望将纬度/经度变量平均到一个点。我需要所有纬度/经度点的异常,我真的不知道如何实现。
任何帮助将不胜感激!
【问题讨论】:
标签: python pandas dataframe netcdf python-xarray