前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >多年暴雨tif数据集合成为一个nc数据

多年暴雨tif数据集合成为一个nc数据

作者头像
用户11172986
发布2024-06-20 17:08:00
690
发布2024-06-20 17:08:00
举报
文章被收录于专栏:气python风雨气python风雨

前言

当处理多年暴雨的 TIF 数据集时,我们可以使用 rioxarray 库将这些数据合成为一个 NetCDF (nc) 文件。NetCDF 是一种常用的科学数据格式,它具有跨平台、可扩展和自描述的特点,非常适合存储和共享地理空间数据。

我们需要首先定义一个包含多个 TIF 文件路径的列表,并使用 rioxarray.open_rasterio 函数打开这些文件,得到相应的 xarray 数据集。然后,通过使用 xr.concat 函数将这些数据集沿时间维度进行合并,形成一个大的数据集。最后,我们可以使用 to_netcdf 方法将合并后的数据集保存为 NetCDF 文件。

评论

安装与导入

代码语言:javascript
复制
代码语言:javascript
复制
!pip install rioxarray -i https://pypi.mirrors.ustc.edu.cn/simple/
代码语言:javascript
复制

In [11]:

代码语言:javascript
复制
代码语言:javascript
复制
import os
import xarray as xr
import numpy as np
import pandas as pd
import netCDF4 as nc
from osgeo import gdal
from glob import glob
import rioxarray
import warnings
warnings.filterwarnings('ignore')

获取tif文件列表

代码语言:javascript
复制
path = '/home/mw/input/precip7227/RainStormChina/RainStormChina/'
file_list = []
for year in range(2001,2020):
    file = glob(path+str(year)+'/*Level*.tif')
    print(file)
    file_list.append(file[0])
代码语言:javascript
复制
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2001/StormLevel2001.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2002/StormLevel2002.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2003/StormLevel2003.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2004/StormLevel2004.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2005/StormLevel2005.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2006/StormLevel2006.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2007/StormLevel2007.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2008/StormLevel2008.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2009/StormLevel2009.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2010/StormLevel2010.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2011/StormLevel2011.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2012/StormLevel2012.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2013/StormLevel2013.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2014/StormLevel2014.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2015/StormLevel2015.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2016/StormLevel2016.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2017/StormLevel2017.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2018/StormLevel2018.tif']
['/home/mw/input/precip7227/RainStormChina/RainStormChina/2019/StormLevel2019.tif']

读取文件

In [13]:

代码语言:javascript
复制
代码语言:javascript
复制
import rioxarray
dataset = rioxarray.open_rasterio(file_list[0])
# 获取 TIF 文件中的变量
dataset

合并nc文件

In [14]:

代码语言:javascript
复制
xds_list = []
time_coord = pd.date_range(start='2001-01-01', end='2019-01-01', freq='AS')
for file in file_list:
    for i in time_coord:
        xds = rioxarray.open_rasterio(file)
        xds = xds.assign_coords(time=i)
        xds_list.append(xds)

merged_xds = xr.concat(xds_list, dim='time')
merged_xds

坏了,两个循环跑出三百多个时间点,怎么办?我只需要01到19年呀 不要怕,神奇海螺说zip的魔术可以帮忙

代码语言:javascript
复制
xds_list1=[]
for file, time in zip(file_list, time_coord):
    xds = rioxarray.open_rasterio(file)
    xds = xds.assign_coords(time=time)
    xds_list1.append(xds)

merged_xds1 = xr.concat(xds_list1, dim='time')
merged_xds1
代码语言:javascript
复制
代码语言:javascript
复制
代码语言:javascript
复制
代码语言:javascript
复制
merged_xds1[1].plot()
代码语言:javascript
复制
代码语言:javascript
复制
<matplotlib.collections.QuadMesh at 0x7fec00112bd0>
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 气python风雨 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 安装与导入
  • 获取tif文件列表
  • 读取文件
  • 合并nc文件
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档