2015-11-29 54 views
3

我需要從netCDf文件中提取值。我對Python很新,甚至更新的這種文件格式。我需要在特定位置(lat,lon)提取時間序列數據。 我發現在UNIX時間裏有一個變量(稱爲「base_time」),另一個變量(稱爲「時間」)與「自2013-20-10 00:00:00以來的秒數」(這是測量時間的開始現在在UTC)。Python - 從netCDF文件中讀取數據,時間爲「秒以來」開始測量

當我詢問數據集的變量,我得到這個:

<type 'netCDF4.Variable'> 
int32 base_time() 
    units: seconds since 1970-01-01 00:00:00 00:00 
unlimited dimensions: 
current shape =() 
filling off 

<type 'netCDF4.Variable'> 
float64 time(time) 
    units: seconds since 2013-10-20 00:00:00 00:00 
    interval(sec): 30.0 
unlimited dimensions: time 
current shape = (2880,) 
filling off 

當我讀值陣列,例如像

time_var = dataset.variables['time'][:] 

我可以看到,有2880(大小爲2880)中的值的時間可變,但只是一個(大小爲1)在base_time變量。 我認爲this答案正是我所需要的,但是我只在需要轉換時間的部分遇到問題。當我這樣做:

dtime = netCDF4.num2date(time_var[:],time_var.units) 

我得到的錯誤:

AttributeError: 'numpy.ndarray' object has no attribute 'units' 

而且我覺得我需要時間變量轉換(秒因爲測量的開始)反正,而不是轉換UNIX時間(因爲netCDf文件中只有一個值?)。 我嘗試了一些datetime.dateime部分的變體,但我只是不明白。我只需要將「2013-10-20 00:00:00之後的秒數」轉換爲可讀格式即可提取和繪製數據。 謝謝!

回答

7

對不起,我只是最近跑過去並抓住了。

在基於numpy的python NetCDF4 api中,NetCDF4.Variable和它包含的numpy數據數組之間存在着很大的差異。您的代碼:

time_var = dataset.variables['time'][:] 

不是NetCDF4變量,即不是一個time_var只是數據值,數字的numpy的ndarray中,NetCDF變量屬性都將丟失,在這種情況下units

units: seconds since 2013-10-20 00:00:00 00:00. 

你想要的是:

time_var = dataset.variables['time'] 

然後:

dtime = netCDF4.num2date(time_var[:],time_var.units) 

應該按預期工作。

相關問題