爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 955|回复: 2

请教一下老师们师兄师姐们,nc数据想用Python提取某一个站点的整个时间序列的2m气温值

[复制链接]

新浪微博达人勋

发表于 2024-1-18 11:42:12 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
请教一下老师们师兄师姐们,nc数据想用Python提取某一个站点的整个时间序列的2m气温值
import numpy as np
import netCDF4 as nc
import os
#import Nio
from glob import glob
import xlwt
from wrf import getvar, ALL_TIMES, to_np
from datetime import datetime
nf = nc.Dataset(r'F:/cyg/wrfout_d01_2022-03-12_00_00_00','r')

def nearest_position( stn_lat, stn_lon, lat2d, lon2d):
    """获取最临近格点坐标索引
    stn_lat  : 站点纬度
    stn_lon  : 站点经度
    lat2d    : numpy.ndarray网格二维经度坐标
    lon2d    : numpy.ndarray网格二维纬度坐标
    Return: (y_index, x_index)
    """
    difflat = stn_lat - lat2d;
    difflon = stn_lon - lon2d;
    rad = np.multiply(difflat,difflat)+np.multiply(difflon , difflon)
    aa=np.where(rad==np.min(rad))
    ind=np.squeeze(np.array(aa))
    return tuple(ind)

if __name__  == "__main__":
    workbook = xlwt.Workbook()
    worksheet = workbook.add_sheet('sheet1')
    m=1
    fpath='F:/cyg/'
    flist = sorted(glob(os.path.join(fpath ,'wrfout_d01*')))
    for fname in flist:

    # wrfout_dir  = "E:/six/3-13/0311/wrfout_d02_2020-01-01_00_00_00"
        lonSta = 123.35  # 站点经纬度
        latSta = -75.11

        wrfout      = nc.Dataset(fname, mode="r")
        lat2D       = to_np(getvar(wrfout, "XLAT"  ))  # units: decimal degrees
        lon2D       = to_np(getvar(wrfout, "XLONG"  ))  # units: decimal degrees
        times       = to_np(getvar(wrfout, "XTIME", timeidx=ALL_TIMES))  #
        nt     = len(times)
        ny, nx = np.shape(lat2D)

        indexSta = nearest_position(latSta, lonSta, lat2D, lon2D)
        jSta = indexSta[0]
        iSta = indexSta[1]

        u10 = wrfout.variables['T2'][:]
        #v10 = wrfout.variables['V10'][:]

        uSta_all = []
        vSta_all = []
        times=[nc.num2date(nf.variables['XTIME'][:],'minutes since 2022-03-12 00:00:00').data for i in range(nt)]
        for it in range(nt):
            uSta = u10[it, jSta, iSta]
            #vSta = v10[it, jSta, iSta]
            uSta_all.append(uSta)
            #vSta_all.append(vSta)
            worksheet.write(m,0,str(times[it]))
            worksheet.write(m,1,str(uSta))
            #worksheet.write(m,2,np.str(vSta))
            m=m+1
        print(uSta_all)
        #print(vSta_all)


workbook.save('./taishanPBLm7.xls'),

这是我运行的代码,但是结果时间上只有一个数据也不太合适,能帮我看看里面有什么错误嘛,拜托
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2024-1-19 09:34:06 | 显示全部楼层
笨一点的办法就是在worksheet.write前print(uSta) 看输出了几个 要么是你循环的次数有问题 要么是你写入worksheet有问题
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

新浪微博达人勋

发表于 2024-4-19 08:54:10 | 显示全部楼层
问题解决了吗?
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表