NCDC气象数据的提取与处理(四):python批量读取、写入nc数据经纬度格点数值

这篇具有很好参考价值的文章主要介绍了NCDC气象数据的提取与处理(四):python批量读取、写入nc数据经纬度格点数值。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1.问题描述:

2.思路:

3.实现过程:

3.1格点位置匹配

3.2写入表格

4.运行效果

4.1打包站点信息

4.2读取nc文件列表

4.3提取对应格点的nc数据

4.4数据写入


1.问题描述:

NCDC的站点数据处理在之前三节里已经介绍过了,但是NCDC的就那么几种数据可能不能满足日常使用,比如说辐射数据他就没有。这时候我们找到其他类型数据要和它原有数据融合,比如本例找的nc格式数据。

2.思路:

本例所用数据集是网格化的面尺度数据,之前处理的NCDC是点数据,最简单的处理方法就是把对应站点所在经纬度找到,再与nc格式数据的格点位置匹配,提取对应位置的nc数据,放入表格。

3.实现过程:

3.1格点位置匹配

def matching(lat_value,lon_value,data): # 文件编码方式[lats,lons],data:需要输入xr.open_dataset()
    '''
    经纬度与格点位置匹配
    输入经纬度,nc数据
    输出所在格点位置对应索引值 lon_idx:经度 lat_idx:纬度
    '''
    # 获取经度和纬度的坐标值
    lons = data['lon'].values
    lats = data['lat'].values
    
    # 获取经纬度坐标的索引值
    lat_idx = np.abs(lats - lat_value).argmin()
    lon_idx = np.abs(lons - lon_value).argmin()
    
    return lat_idx,lon_idx

上述函数要求输入站点所在的经度、纬度,以及要读的nc文件

3.2写入表格

我直接放完整示例代码上来,大家按需修改。

# 读取站点经纬度。将对应格点数值写入dataframe
import xarray as xr
import netCDF4 as nc
import numpy as np
import pandas as pd
import os
import openpyxl


# 定义函数
def matching(lat_value,lon_value,data): # 文件编码方式[lats,lons],data:需要输入xr.open_dataset()
    '''
    经纬度与格点位置匹配
    输入经纬度,nc数据
    输出所在格点位置对应索引值 lon_idx:经度 lat_idx:纬度
    '''
    # 获取经度和纬度的坐标值
    lons = data['lon'].values
    lats = data['lat'].values
    # 获取经纬度坐标的索引值
    lat_idx = np.abs(lats - lat_value).argmin()
    lon_idx = np.abs(lons - lon_value).argmin()    
    return lat_idx,lon_idx


# 输入站点列表
stations = pd.read_excel('../../Desktop/YellowRiver_station_ID.xlsx') # 站点列表位置,这句按自己需求修改***************
station_code_list = [str(x)[:6] for x in stations["STATION_ID"]]  # 没看懂的复习一下     NCDC气象数据的提取与处理(二)
LAT_list = [x for x in stations["LAT"]]
LON_list = [x for x in stations["LON"]]
station_data = zip(station_code_list,LAT_list,LON_list)
station_data = list(station_data)     # 包含每个站点的编号、纬度、经度,如coordinate[0]为站点编号


# 设置输入文件列表
in_rootdir = r"E:\China_station_Srad" # 设置输入根目录, 这句按自己需求修改********************************************
file_list = [] 
for root, dirs, files in os.walk(in_rootdir):           # 获取输入根目录下所有文件
    for file in files:                                  # 遍历所有文件名
        if os.path.splitext(file)[-1] == '.nc':         # 获取所有nc文件绝对路径列表
            file_list.append(os.path.join(root, file))   # 拼接出 绝对路径 并放入列表
            
# 坐标匹配
print("*"*15,"坐标匹配","*"*15)       # 绘制分割线
data = xr.open_dataset(file_list[0])
coord_idx_list = []
for coordinate in station_data:      # coordinate[i],i=0,1,2;依次表示站点编号、纬度、经度
    coordinate_index = matching(lat_value=coordinate[1],lon_value=coordinate[2],data=data)
    coord_idx_list.append((coordinate[0],coordinate_index))       # 形如:[('534630', (258, 418)),…]
print("*"*15,"匹配完成","*"*15)      # 绘制分割线


# 读取nc数据,写入xlsx文件
for file_name in file_list:          
    data = nc.Dataset(file_name)
    times = nc.num2date(data["time"][:],data["time"].units)       # 时间的格式转换,得到一个数组
    dt = [times[i].strftime() for i in range(data["time"].size)] # 获取时间序列

    # 创建一个新dataframe
    df = pd.DataFrame(columns=['Date','srad'])                # 这句按自己需求修改***************************************
    df['Date'] = pd.to_datetime(dt)
    df = df.set_index('Date')

    # 设置输出路径
    out_rootdir = r"E:\Srad_TEST_2"        # 设置输出根目录 ,这句按自己需求修改*****************************************
    workbook = openpyxl.Workbook()       # 创建Workbook对象
    moy = os.path.splitext(file_name)[0][-6:]                # 获取年和月moy:month of year
    print("-"*25,moy,"-"*25)             # 绘制分割线,年月
    outfile_dir = f'{out_rootdir}\\test{moy}.xlsx'
    workbook.save(outfile_dir)           # 保存空的xlsx文件

    for idx in coord_idx_list:     # idx[0]表示站点编号、idx[1][0],idx[1][1]分别表示纬度、经度
        print("*"*15,idx[0],"*"*15) # 绘制分割线,站点代号
        location = idx[1] # 获得格点坐标location,包含(纬度,经度)
        tempfile = []
        for i in range(data["time"].size):         
            tempfile.append(data["srad"][i][location])        # 获得对应格点的属性值,并存入列表
        df["srad"] = tempfile                                 # 对应格点的属性值存入dataframe
        srad_mean = df.resample('d').mean()                   # mean:取属性值的日均值
        writer = pd.ExcelWriter(outfile_dir, engine='openpyxl',mode='a') # 将excel写入对象writer
        """
        将各站点的数据表写入Excel中的
        sheet1、sheet2、sheet3……,
        sheet以站点编号命名
        """
        srad_mean.to_excel(writer, sheet_name=idx[0])  # idx[0]为站点编号
        writer.save()                   # 保存读写的内容
    wb = openpyxl.load_workbook(outfile_dir)      
    del wb['Sheet']                     # 删除新建Excel时默认的空表
    wb.save(outfile_dir)    

4.运行效果

4.1打包站点信息

首先我有一个xlsx文件,名为“YellowRiver_station_ID.xlsx',之前文章出现过,存放的是NCDC对应站点的代号和经纬度,(还有高程,这里用不到)形式如下:

气象nc数据,数据处理,CDS,python,数据分析,经验分享

 我这边用了一次 list() 和 zip() 函数的套用,总之最后打包效果就是[(a1, b1,c1 ), (a2, b2,c2 ), …],abc分别表示站点代号,经度,纬度。

4.2读取nc文件列表

我这边还有一个文件夹,名为“China_station_Srad”。里面存放着这次要读的nc文件

气象nc数据,数据处理,CDS,python,数据分析,经验分享

 我这里做了一个 file_list ,把文件夹里所有nc格式文件的绝对路径存进去了

对于每一条绝对路径,做如下操作

4.3提取对应格点的nc数据

创建一个dataframe,形式如下:

气象nc数据,数据处理,CDS,python,数据分析,经验分享

4.4数据写入

将各站点的数据表写入xlsx中的sheet1、sheet2、sheet3……,sheet以站点编号命名

气象nc数据,数据处理,CDS,python,数据分析,经验分享

 最后, 文件名称以 年月 命名,形如 201812

如有错漏希望各位大佬不吝指教。文章来源地址https://www.toymoban.com/news/detail-755014.html

到了这里,关于NCDC气象数据的提取与处理(四):python批量读取、写入nc数据经纬度格点数值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • python&Pandas二:数据读取与写入

    Pandas提供了各种函数和方法来实现数据读取和写入的操作。下面我将详细介绍Pandas中常用的数据读取和写入的方法。 数据读取: 从CSV文件读取:可以使用 pd.read_csv() 函数来读取CSV文件,并将其转换为DataFrame对象。 从Excel文件读取:可以使用 pd.read_excel() 函数来读取Excel文件,

    2024年02月03日
    浏览(51)
  • python读取、写入以及删除es数据

    最近这段时间被es所困扰,庆幸最终学会了python操作es,怕以后忘记了,把代码放出来: 1.python读取es数据 2.python删除es数据: 3.python读取txt文档,再写入数据:

    2024年02月12日
    浏览(47)
  • Python读取写入数据到Excel文件

    【Linux干货教程】Ubuntu Linux 换源详细教程 大家好,我是洲洲,欢迎关注,一个爱听周杰伦的程序员。关注公众号【程序员洲洲】即可获得10G学习资料、面试笔记、大厂独家学习体系路线等…还可以加入技术交流群欢迎大家在CSDN后台私信我! Hello,各位看官老爷们好,洲洲已

    2024年02月12日
    浏览(83)
  • 常见气象数据获取方式及批量下载代码汇总

    气象数据获取因其数据源多、请求规则不一,格式复杂、体积庞大,所以经常成为气象小白的噩梦。这里收集了一些常用气象数据下载方法及下载的代码,供大家参考 目录 1. 中国气象数据网(这是最官方的数据平台) 2. NOAA 全球地面站观测数据 3. 全球探空数据 4. 全国空气质

    2024年01月24日
    浏览(49)
  • python如何操作excel,在excel中读取和写入数据

    Excel 是 Microsoft 为使用 Windows 和 Apple Macintosh 操作系统的电脑编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使 Excel 成为最流行的个人计算机数据处理软件。在 1993 年,作为 Microsoft Office 的组件发布了5.0版之后, Excel 就开始成为

    2024年02月03日
    浏览(61)
  • “AI Earth”人工智能创新挑战赛:助力精准气象和海洋预测Baseline[1]、NetCDF4使用教学、Xarray 使用教学,针对气象领域.nc文件读取处理

    比赛官网:https://tianchi.aliyun.com/specials/promotion/aiearth2021?spm=a2c22.12281976.0.0.4d0d19efK2FngK 聚焦全球大气海洋研究前沿方向,将人工智能技术应用到天气气候预测领域中,提高极端灾害性天气的预报水平,已成为整个行业研究的热点方向。发生在热带太平洋上的厄尔尼诺-南方涛动

    2024年02月08日
    浏览(82)
  • python自动化办公——定制化读取Excel数据并写入到word表格

    最近到了毕业设计答辩的时候,老师让我帮毕业生写一段毕业设计的功能就是提供一个 学士学位授予申请表 ,根据定制化需求,编写定制化代码。 docx格式的word如下图。 再提供一个Excel表格,要求可以直接读取表格里的对应内容,填入到word表格里的对应位置。表格是我自己

    2024年02月10日
    浏览(59)
  • SpringBoot集成Milo库实现OPC UA客户端:连接、遍历节点、读取、写入、订阅与批量订阅

    前面我们搭建了一个本地的 PLC 仿真环境,并通过 KEPServerEX6 读取 PLC 上的数据,最后还使用 UAExpert 作为OPC客户端完成从 KEPServerEX6 这个OPC服务器的数据读取与订阅功能。在这篇文章中,我们将通过 SpringBoot 集成 Milo 库实现一个 OPC UA 客户端,包括连接、遍历节点、读取、写入

    2024年02月09日
    浏览(64)
  • Python读取指定的TXT文本文件并从中提取指定数据的方法

      本文介绍基于 Python 语言,遍历文件夹并从中找到文件名称符合我们需求的多个 .txt 格式文本文件,并从上述 每一个文本文件 中,找到 我们需要的指定数据 ,最后得到 所有文本文件中 我们 需要的数据的合集 的方法。   首先,我们来明确一下本文的具体需求。现有

    2024年02月14日
    浏览(54)
  • Python读取.nc数据并提取指定时间、经纬度维度对应的变量数值

      本文介绍基于 Python 语言的 netCDF4 库,读取 .nc 格式的数据文件,并提取指定维(时间、经度与纬度)下的变量数据的方法。   我们之前介绍过 .nc 格式的数据,其是 NetCDF (Network Common Data Form)文件的扩展名,是一种常用的科学数据存储格式,多用于存储科学和工程领

    2024年03月08日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包