panda提取时间戳中的日期_CMIP6数据提取---Python实现方案
一個(gè)月前寫了一篇“使用Arcgis處理CMIP6(netCDF)數(shù)據(jù)的流程”后,一直收到朋友們的私信,也幾乎天天都有交流。說(shuō)來(lái)慚愧,后來(lái)我放棄了使用Arcgis進(jìn)行處理這一條路,而是直接采用Python提取柵格點(diǎn)的時(shí)間序列數(shù)據(jù),進(jìn)行處理。
目前忙著降尺度的工作,可能會(huì)減少在知乎上的交流,因此在這里我會(huì)把目前掌握的部分?jǐn)?shù)據(jù)提取方法分享出來(lái),希望能幫到大家。
不用寫代碼的方法:
這個(gè)方法是我后面才發(fā)現(xiàn)的,優(yōu)點(diǎn)就四個(gè)字:簡(jiǎn)單粗暴!,缺點(diǎn)是輸出格式死板,需要就格式問(wèn)題調(diào)整很久。
首先,你需要在電腦上裝有java的環(huán)境(別皺眉,只要有環(huán)境就行,不需要coding);
然后,點(diǎn)擊下面鏈接,下載panoply(這個(gè)軟件也有制圖的功能,并且成圖操作非常簡(jiǎn)單友好);
https://www.giss.nasa.gov/tools/panoply/?www.giss.nasa.gov下載好之后打開(kāi)這個(gè)軟件,選擇nc文件,右邊可以看到數(shù)據(jù)描述性信息,選中要輸出的變量,如PR,右鍵選擇export csv,然后等著就行。
不知道為什么一直上傳圖片失敗,圖先欠著,下同...
輸出之后的csv文件普遍非常大,我示例中最大的一個(gè)達(dá)到了6g以上。它的數(shù)據(jù)輸出后是這樣的,每個(gè)時(shí)間點(diǎn)的全球數(shù)據(jù)作為一個(gè)矩陣,每一列是同一經(jīng)度下,每一行是同一緯度下,以分辨率360*720為例,這個(gè)矩陣的大小就是(360,720),它是月尺度的,從1850-2014一共165年,1980個(gè)月,所以一共有1980個(gè)這樣的矩陣,綜上,PR的數(shù)據(jù)形態(tài)就是(1980,360,720)。
但是這樣的數(shù)據(jù)形式我們不好應(yīng)用,下面介紹使用python的方法提取。
默認(rèn)大家都擁有配置好的python3環(huán)境,我們需要的庫(kù)有:netCDF4,numpy,pandas。
其中netCDF4用來(lái)查看數(shù)據(jù),了解數(shù)據(jù)信息,制定提取策略。numpy和pandas用于提取數(shù)據(jù),并按我們需要的格式輸出。
主要是查看數(shù)據(jù)的shape:
for然后你會(huì)看到我在前面提過(guò)的(t,x,y)這個(gè)形式,可以理解為一個(gè)三維矩陣(t,(x,y)),(x,y)代表數(shù)據(jù)的分辨率,如(360,720),就意味著一共有360*760個(gè)柵格點(diǎn),對(duì)應(yīng)到緯度和經(jīng)度后,我們就可以知道這個(gè)數(shù)據(jù)是0.5度*0.5度的柵格,即50km分辨率。
那么現(xiàn)在我們要做的就是提取我們想要的數(shù)據(jù)了。很多朋友都在問(wèn)我怎么按區(qū)域提取數(shù)據(jù),我沒(méi)有做這個(gè)工作,我是按照手里有的實(shí)測(cè)站點(diǎn)位置來(lái)檢索柵格點(diǎn)并下載數(shù)據(jù)的,按區(qū)域下載的思路我放在最后說(shuō)。
pr首先定義一個(gè)函數(shù)用來(lái)找到我們所需經(jīng)緯度點(diǎn)最近的柵格點(diǎn):
import現(xiàn)在寫一個(gè)for循環(huán),提取出某個(gè)點(diǎn)的時(shí)間序列數(shù)據(jù)到一個(gè)list中:
for同理,通過(guò)循環(huán)嵌套就可以提取出所有的點(diǎn)的時(shí)間序列數(shù)據(jù)。
這時(shí),有的朋友可能會(huì)發(fā)現(xiàn)輸出的結(jié)果里沒(méi)有時(shí)間這一列。這是因?yàn)槲野l(fā)現(xiàn)nc文件中的時(shí)間格式如果直接導(dǎo)出的話看起來(lái)類似于時(shí)間戳,但是轉(zhuǎn)化后會(huì)發(fā)現(xiàn)對(duì)不上,所以我采取了自己生成日期序列的笨辦法(月尺度的還好,日尺度的很麻煩,因?yàn)榇蠖鄶?shù)模型都沒(méi)有閏年這個(gè)概念,即沒(méi)有2月29日,生成日尺度日期序列時(shí)要避開(kāi)這一坑),把list轉(zhuǎn)為數(shù)據(jù)框后,加上日期序列這一index,再輸出為csv即可。不過(guò),如果做多模型,并且后續(xù)處理分析也在python中完成的話,我覺(jué)得完全沒(méi)必要將中間數(shù)據(jù)輸出。
如果要做月變化的對(duì)比,可以采取切片的方式,將list按12步長(zhǎng)切片,每一片都是一年的12條數(shù)據(jù)。
def數(shù)據(jù)提取暫且說(shuō)這么多,開(kāi)頭提到的按區(qū)域提取數(shù)據(jù)的思路,我的想法是:通過(guò)目標(biāo)區(qū)域的外多邊形坐標(biāo)經(jīng)緯度點(diǎn)集,然后做一個(gè)遍歷判斷,把在多邊形內(nèi)的點(diǎn)篩選出來(lái),得到符合要求的點(diǎn)的索引號(hào),然后把這些點(diǎn)的數(shù)據(jù)輸出。但是因?yàn)檫@段時(shí)間太忙,還沒(méi)有動(dòng)手嘗試過(guò),大家有思路的話,也歡迎在評(píng)論區(qū)交流。
總結(jié)
以上是生活随笔為你收集整理的panda提取时间戳中的日期_CMIP6数据提取---Python实现方案的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 线缆直径载流量估算及其他
- 下一篇: 均值归一化_数据预处理:标准化和归一化