对ERA5数据进行区域提取及时间处理
1.区域提取
(1)ERA5数据的区域提取其实在下载页面就可以直接选择需要的区域,选择一个城市大小的区域文件只要25KB左右
在这个页面中,东经西经、南纬北纬的选择是以正负号来确定的,当选择的区域是西经、南纬时,需要加负号
(2)如果忘记了选择具体的区域,下载了整个文件,那么最推荐的是重新选择区域下载,其次可以用以下代码选择(参考了知乎回答:https://www.zhihu.com/question/585273125/answer/2903435770)
import netCDF4 as nc import pandas as pd #打开nc文件 with nc.Dataset('xxx.nc', 'r') as ds: var = ds.variables['xxx'][:]#此处把xxx换位要提取的要素标签 # 定义经纬度范围 lon_min, lon_max = 118.68, 118.93 lat_min, lat_max = 31.95, 32.15 #制作范围 lon_range = (ds.variables['longitude'][:] >= lon_min) & (ds.variables['longitude'][:] <= lon_max) lat_range = (ds.variables['latitude'][:] >= lat_min) & (ds.variables['latitude'][:] <= lat_max) # 提取区域数据 var_region = var[:, lat_range, lon_range] var_region_2d = var_region.reshape(var_region.shape[0], -1) # 将数据转换为DataFrame df = pd.DataFrame(var_region_2d) # 添加转换后的时间列 df['time'] = nc.num2date(ds.variables['time'][:],'hours since 1900-1-1 00:00:00').data # 导出数据 df.to_csv('output.csv', index=False)
其输出的csv是这样的
2.做完上述操作得到了看起来已经可以使用的数据,但是我们还有一件非常重要事情要做
ERA5的数据使用的时间是UTC世界时,与我国的北京时间相差8小时,如果将上面csv中的开尔文转为温度就会发现早上9点是一天中最热的时候,而中午一点却是最冷的时候,需要对时间列进行世界转换
(1)将时间列修改一下单元格格式方便读取,修改为“自定义-yyyy/mm/dd/hh”格式
(2)时间转换代码如下
import csv import datetime from datetime import timedelta import pandas as pd #准备储存北京时的列表 time_bj_list=[] with open('output.csv', 'r') as f: reader = csv.reader(f) #跳过表头 next(reader) for row in reader: origin_time=row[2] print(origin_time) #将字符串转为时间戳 time_utc = datetime.datetime.strptime(origin_time,"%Y/%m/%d/%H") #查看转换好的时间戳 print(time_utc) #对时间戳进行世界时转北京时 time_bj = time_utc+timedelta(hours=8) #将北京时存入列表中 time_bj_list.append(time_bj) #pd读取csv,准备在原有列旁新增一列 Data=pd.read_csv('output.csv') #新增'bj_time'列,将储存着北京时的列表输入此列 Data['bj_time']=time_bj_list #将新增了bj_time列的Data覆盖原有文件 Data.to_csv('output.csv',index=False)
转换后在原有的时间旁边新增了北京时间列
(3)附:温度转换
ERA5的温度单位是K,需要-273.15转换为摄氏度
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示