今天给大家分享一个数据平均值的吧,好像从来没有分享过这个内容。
以问题为导向利用Python帮助我们解决在科研中遇到的问题。最近有同学在处理TRMM降水数据的时候,说是要提取每个月的均
值出来。数据格式是tif栅格,目的也是非常明确的:提取多个tif的降水栅格均值出来。
刚才看了一下TRMM的计划说是在2015年就退役了,我看了一下同学给我的数据,居然都到2019年了,这个我也不是很清楚,我
只知道把数据提取出来就行了。
Python学习交流Q群:906715085##### 首先,我先用ArcGIS打开数据看看大概是什么样子的。这里我打开了第一个时间和最近一个时间的数据,一看,哟呵,居然是全 球的,但是同学要提取的并不是全球的,而是中国某个区域的。So,我不得不对tif栅格数据进行掩膜提取。数据也看到了,是 1980-2019年的,月的,共计260多个文件,如果一个一个地去掩膜提取,那是很烦的,包括这个任务的主要目的:提取每一个tif 栅格的均值,一个一个地搞都是非常麻烦的。So,先mask出指定区域的tif出来,再对这些tif求均值提取。
关于批量掩膜提取的内容,可以看看之前的记录,这里就不仔细说了,这个是链接地址:
使用ArcPy进行矢量数据对栅格数据的批量裁剪
得到批量掩膜出来的tif就是指定区域的了,这就可以开始来提取均值了。当然,如果你想用ArcGIS一个一个地打开这260多个tif栅
格在属性里查看均值,然后复制出去也是没问题的,只是很麻烦
SO,用Python来执行这个任务,在colab中使用相关的脚本,因为有的包在我的电脑上老安装不上
掩膜提取的tif我已经上传到google drive了,因为我需要在colab写相关的脚本
具体的提取流程就是gdal来读取tif数据,转为numpy数组计算均值,so easy
。我先读取一个试试,如果可以的话,直接遍历所有tif来读取,一个的读取是没问题的。
既然一个的读取是没问题的,那就开始批量读取并计算并导出为DataFrame去。也看到了,我的目录是多层文件夹,so,用
os.walk处理
脚本如下,之前在提取全球的时候没什么问题,But,,当我提取指定研究区均值的时候输出结果就是-inf,我用了nanmean也没有
变化,负无穷,搜索了一下,原来的原因大概是提取出来之后边边就变成黑色的了,我画一个示意图就清除了
这些黑边框的影响导致计算出错,so,用了np.where去处理,因为是降水数据,就把小于0的全部赋值成0了,最后计算就没问题
了。where还可以用来进行逻辑判断,看看到底是那些数据是-inf的。
最后提取得到电子表格,月的数据,如果想计算四个季节的均值,那么一行命令也就搞定了,也是非常方便的。
最后
这一章到这里就结束了,今天分享的内容到这里就没有了,喜欢的小伙伴点赞收藏,有问题的小伙伴评论留言,看见都会回复噢。下一篇见。
来源:https://www.cnblogs.com/123456feng/p/16129685.html
本站部分图文来源于网络,如有侵权请联系删除。