如何从python的NetCDF文件中将数据信息(YYYMMDD)分为YYYY MM DD?

时间:2019-06-21 14:53:39

标签: python numpy split netcdf4

我对python还是很陌生,我读了一些以前的相关问题,但是这些问题并不能完全回答我的问题:

对于我的案例研究,我已经有一个用于切片的.nc文件。在python中,我进行处理,我需要3个不同的列中的时间[2015 01 31],尽管在YYYYMMDD [20150101 20150131 .... 20171221]中给出了我的时间

我尝试使用模块netCDF4和numpy根据需要处理和拆分数据。

#Script for reading .nc files using the netcdf4 module in Python

import numpy as np
import netCDF4 as nc


os. chdir('/mnt/lustre02/work/ch0636/g260150/sims/validation/selectedmodelRCPs/RCP2.6/Model1/')

#extract time in a single array to append it to the whole dly. weather file

data=nc.Dataset('precipitation.nc','r')
time=data.variables['time'][:]
b=np.zeros((time.size,1))
b[:,0]=time

#Extracting time sections: year, month, day

year=[]
month=[]
day=[]

for i in range(len(b)):
    year.append(b[i][0:4])
    month.append(b[i][4:6])
    day.append(b[i][6:])

print(day)  
print(month)
print(year)

运行该部分给出的那一天是整个日期,包括年,月和日。月和日是空数组。 我不太确定如何才能以正确的方式实际解决此问题,这将有助于我获得所需的进一步处理信息。

1 个答案:

答案 0 :(得分:0)

要使用您的解决方案获取年,月和日的数组,我建议进行如下修改:

year=[]
month=[]
day=[]

for i in range(len(b)):
    yval=np.floor(b[i]/10000.)
    mval=np.floor((b[i]-yval*10000.)/100.)
    dval=np.floor(b[i]-yval*10000.-mval*100.)    
    year.append(int(yval))
    month.append(int(mval))
    day.append(int(dval))

print(day)  
print(month)
print(year)

尽管如此,我也可以建议这样的代码,我们首先将时间转换为日期值,然后提取年,月和日:

# other way:
import datetime
def get_date(datevalin):
    fraction_of_day=datevalin-np.floor(datevalin)
    d0=datetime.datetime.strptime(str(int(np.floor(datevalin))),'%Y%m%d')
    dval=d0+datetime.timedelta(seconds=fraction_of_day*24.*3600)
    return dval

dates=[get_date(val) for val in time];
year=[val.year for val in dates];
month=[val.month for val in dates];
day=[val.day for val in dates];