Python计算某一区域平均海温

import netCDF4 as nc
import pandas as pd
import numpy as np

# 海冰
file = '.\sst\HadISST_sst.nc\HadISST_sst.nc'
dataset = nc.Dataset(file)

# 查看一些文件中都有哪一些变量
print(dataset.variables.keys())
# lat:180 lon:360 time:1818
# sst(time=1818, latitude=180, longitude=360)

# 读取数据信息
time = dataset.variables['time'][:]
latitude = dataset.variables['latitude'][:]
longitude = dataset.variables['longitude'][:]
sst = dataset.variables['sst'][:]
sst[sst==-1000]=np.nan

# idx = np.argmin(numpy.abs(A - target))

# 选定感兴趣的区域
# 区域1:AP
# lon1=-75 lon2=-45
# lat1=-69 lat2=-59
region='AP'

lon1=-75
lon2=-45
lat1=-69
lat2=-59
lon=[lon1,lon2]
lat=[lat2,lat1]
lon_index=[]
lat_index=[]

for target in lon:
    lon_index.append(np.argmin(np.abs(longitude - target)))
for target in lat:
    lat_index.append(np.argmin(np.abs(latitude - target)))

# sst(time=1818, latitude=180, longitude=360)
sst_t=np.nanmean(np.nanmean(sst[:,lat_index[0]:lat_index[1],lon_index[0]:lon_index[1]],axis=2),axis=1)
date=pd.date_range('18700101','20210701',freq='1M')
sst_table={'date':date,'sst':sst_t}
sst_table=pd.DataFrame(sst_table)
sst_table=sst_table.set_index('date')
sst_table.resample('Y').mean().to_excel(region+'_sst_annual.xlsx')
sst_table["1870-3":].resample('3M').mean().to_excel(region+'_sst_seasonal.xlsx')
sst_table["1870-3":].resample('3M').mean().iloc[2::4,0].to_excel(region+'_sst_Southern hemisphere spring.xlsx')
sst_table["1870-3":].resample('3M').mean().iloc[1::4,0].to_excel(region+'_sst_Southern hemisphere winter.xlsx')
sst_table["1870-3":].resample('3M').mean().iloc[0::4,0].to_excel(region+'_sst_Southern hemisphere autumn.xlsx')
sst_table["1870-3":].resample('3M').mean().iloc[3::4,0].to_excel(region+'_sst_Southern hemisphere summer.xlsx')

# 区域3:RS,在经纬度上需要分成两个小区域
# 区域3-1
# lon1=-180 lon2=-170
# lat1=-80 lat2=-65
# 区域3-2
# lon1=155 lon2=180
# lat1=-80 lat2=-65
region='RS'

lon1=-180 
lon2=-170
lon3=155 
lon4=180
lat1=-80 
lat2=-65
lon=[lon1,lon2,lon3,lon4]
lat=[lat2,lat1]
lon_index=[]
lat_index=[]
for target in lon:
    lon_index.append(np.argmin(np.abs(longitude - target)))
for target in lat:
    lat_index.append(np.argmin(np.abs(latitude - target)))
lon_index_range=list(range(lon_index[0],lon_index[1]))+list(range(lon_index[2],lon_index[3]+1))

# sst(time=1818, latitude=180, longitude=360)
sst_t=np.nanmean(np.nanmean(sst[:,lat_index[0]:lat_index[1],lon_index_range],axis=2),axis=1)

date=pd.date_range('18700101','20210701',freq='1M')
sst_table={'date':date,'sst':sst_t}
sst_table=pd.DataFrame(sst_table)
sst_table=sst_table.set_index('date')
sst_table.resample('Y').mean().to_excel(region+'_sst_annual.xlsx')
sst_table["1870-3":].resample('3M').mean().to_excel(region+'_sst_seasonal.xlsx')
sst_table["1870-3":].resample('3M').mean().iloc[2::4,0].to_excel(region+'_sst_Southern hemisphere spring.xlsx')
sst_table["1870-3":].resample('3M').mean().iloc[1::4,0].to_excel(region+'_sst_Southern hemisphere winter.xlsx')
sst_table["1870-3":].resample('3M').mean().iloc[0::4,0].to_excel(region+'_sst_Southern hemisphere autumn.xlsx')
sst_table["1870-3":].resample('3M').mean().iloc[3::4,0].to_excel(region+'_sst_Southern hemisphere summer.xlsx')
  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值