python简单读取和索引.nc文件(气象小白入门版)

该代码示例演示了如何使用Python的xarray库读取NCEP的气压数据,并进行时间、高度等维度的索引操作。通过`wget`命令下载数据,然后利用xarray的`open_dataset`打开文件,通过`.loc`进行切片获取特定时间段和高度的气压数据。同时,展示了如何根据datetime属性筛选特定月份的数据。
该文章已生成可运行项目,

 一、总代码

#数据下载,这里下载的是NCEP的气压数据,在命令行运行代码即可
#wget -P /mnt/g/st_touchfish_py/data ftp://ftp.cdc.noaa.gov/Datasets/ncep.reanalysis.derived/pressure/air.mon.mean.nc

import xarray as xr
import pandas as pd
import numpy as np

#用xarray库读入文件
file = xr.open_dataset('/mnt/g/st_touchfish_py/data/air.mon.mean.nc')
#print一下文件看看都有啥
print(file)
#dataarray文件包含四部分~维度DIMS&坐标cord--经度、纬度、高度、时间;值VALUE--气压;属性attributes:文件信息...

#索引的顺序不能颠倒,可通过print(file.air)查看顺序
print(file.air)
air_00_20 = file.air.loc['2000-01-01':'2020-12-31',500,:,:]
print(air_00_20)

#检查格式:若是datatime格式则可以分年、月、日索引
print(air_00_20.time)
air_00_20_sum = air_00_20.loc[air_00_20.time.dt.month.isin([6,7,8])]
print(air_00_20_sum)

二、代码解释

(1)NECP气象数据下载

wget -P /mnt/g/st_touchfish_py/data ftp://ftp.cdc.noaa.gov/Datasets/ncep.reanalysis.derived/pressure/air.mon.mean.nc

注意:/mnt/g/st_touchfish_py/data是存放文件的路径,改成自己的噢

(2)下载相应库

这里用到了三个库xarray pandas numpy(xarray是基于pandas建立的,两者很相似;numpy很常用,涉及处理数组都会用到)

#导入相应的库
import xarray as xr
import pandas as pd
import numpy as np

如果命令行提示“No Model xxx”,就是没有安装对应的库。安装上就好了。

比如缺少xarray和pandas,直接在命令行里面运行:conda install -c conda-forge xarray pandas 

(如果上述命令不行,尝试pip install xarray)

(3)读入文件并查看文件内容

#用xarray库读入文件
file = xr.open_dataset('/mnt/g/st_touchfish_py/data/air.mon.mean.nc')
#print一下文件看看都有啥
print(file)
#dataarray文件包含四部分~维度DIMS&坐标cord--经度、纬度、高度、时间;值VALUE--气压;属性attributes:文件信息...

运行结果:

可以看到这是xarray读进来的数据集:红框的四部分。

Data variables是数据变量,若下载的文件是温度数据,变量就是温度;是风场数据,变量就是风速。

Dimensions是变量的维度,有四个,每个维度的数字就代表有几个值,比如level:17就是有17个高度值,想要具体看看是什么值,可以print一下

print(file.level)

如下图红框,17个高度值就存在数组中

 (4)索引文件(时间/高度/经纬度)

#索引的顺序不能颠倒,可通过print(file.air)查看顺序
print(file.air)
air_00_20 = file.air.loc['2000-01-01':'2020-12-31',500,:,:]
print(air_00_20)

 print(file.air)运行结果如下图所示,可以看到属性存放的顺序是:时间-->高度-->纬度-->经度,索引的时候一定要按照这个顺序写约束。

这里的顺序指的是两方面:一个是属性存放的顺序(时间是第一个,高度是第二个...),还有每个属性中的数据存放的顺序(时间属性中,1948排在1949前面)。

这两个顺序在写索引的时候都不能颠倒。

loc函数就是用于索引的,比如要提取2000年到2020年,高度为500的所有气压数据,就可以写成

air_00_20 = file.air.loc['2000-01-01':'2020-12-31',500,:,:]

(而如果写成 air_00_20 = file.air.loc[500,'2000-01-01':'2020-12-31',:,:]就没遵循不同属性的顺序

写成air_00_20 = file.air.loc['2020-01-01':'2000-12-31',500,:,:]就没遵循某一个属性的具体值的存放顺序)

print一下 air_00_20:可以看到已经把对应的时间范围 和 高度 =500提取出来了 

附:如果数据是datetime格式,还可以这么索引

#若是datetime格式则可以分年、月、日索引
#检查格式
print(air_00_20.time)
air_00_20_sum = air_00_20.loc[air_00_20.time.dt.month.isin([6,7,8])]
print(air_00_20_sum)

先看看变量的格式:print(air_00_20.time),下图可以看到是datetime格式,则可以使用dt.month进行月份的索引,写法如上述代码所示。

 输出结果:将6/7/8月的值提取了出来。

本文章已经生成可运行项目
### Python读取处理.nc文件中的气象数据 对于气象数据分析而言,`.nc`(NetCDF)文件是一种常用的数据存储格式。为了有效地操作这些文件,在Python中有几个库特别有用,比如 `netCDF4` `xarray`。 #### 使用 netCDF4 库来加载 NetCDF 文件并访问其变量 安装所需的包可以通过pip命令完成: ```bash pip install netCDF4 numpy pandas matplotlib ``` 下面是一个简单的例子展示怎样打开一个 `.nc` 文件以及获取其中的信息[^1]: ```python from netCDF4 import Dataset # 打开指定路径下的 nc 文件作为只读模式 file_path = 'path_to_your_file/your_meteorological_data.nc' dataset = Dataset(file_path, mode='r') print(dataset) # 输出整个 dataset 的结构概览 for dimension in dataset.dimensions.values(): print(dimension) # 查看所有的维度信息 for variable_name, variable_instance in dataset.variables.items(): print(f'Variable name: {variable_name}, Variable instance: {variable_instance}') dataset.close() # 关闭连接到该文件的句柄 ``` 这段脚本会打印出所选文件内的所有元数据、维度名称及其大小还有各个变量的名字连同它们各自的属性。 #### 利用 XArray 进行更高级的操作 XArray 是建立在Pandas之上的一套工具集,它使得多维数组计算变得简单直观,并且非常适合用来分析像气候这样的科学领域产生的复杂数据集。要使用这个功能强大的库来进行相同的任务,则可以这样做: 先通过 pip 安装 xarray 及其他依赖项: ```bash pip install xarray dask fsspec s3fs zarr ``` 接着可以用如下方式快速浏览文件内容并执行一些基本查询: ```python import xarray as xr ds = xr.open_dataset('path_to_your_file/your_meteorological_data.nc') print(ds) # 获取特定时间范围内的温度数据切片 (假设存在名为'temperature'的变量) temperature_slice = ds['temperature'].sel(time=slice('start_date', 'end_date')) print(temperature_slice) # 绘制地图上的平均气温分布图 temperature_slice.mean(dim=['time']).plot() ``` 这里不仅展示了如何轻松地选取子集,还说明了绘制图表是多么容易——只需调用 plot 方法即可! 上述方法提供了两种不同的途径去探索理解来自 NetCDF 文件里的气象资料;前者更适合初学者学习基础概念,而后者则为那些希望深入挖掘数据的人士提供了一个强大平台[^2]。
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值