简体   繁体   中英

Python - Read data from netCDF file with time as "seconds since" beginning of measurement

I need to extract values from a netCDf file. I am pretty new to python and even newer this file format. I need to extract time series data at a specific location (lat, lon). I have found that there is a variable (called "base_time") in UNIX time and another variable (called "time") with "seconds since 2013-20-10 00:00:00" (which is the beginning of measurement time in UTC) for now.

When i interrogate the dataset's variables, I get this:

<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

When I read the values as arrays, like eg

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

I can see that there are 2880 (size is 2880) values in the time variable, but just one (size is 1) in the base_time variable. I think that this answer does exactly what I need, but I have only trouble with the part where I need to convert the time. When I do:

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

I get the error:

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

And I think that I need to convert the time variable (seconds since beginning of measurement) anyway, instead of converting the UNIX time (because there is only one value in the netCDf file?). I tried some variations of the datetime.dateime part but I just don't get it. I only need to convert the "seconds since 2013-10-20 00:00:00" to a readable format to be able to extract und plot the data. Thanks!

Sorry for being verbose but this is something I've just recently run across and grasped.

In the python NetCDF4 api, which is based on numpy, there is a profound difference between a NetCDF4.Variable and the numpy data array which it contains. Your code:

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

is not a NetCDF4 variable, ie not a time_var but just the data values, a numpy ndarray of numbers, the NetCDF variable attributes are lost, in this case units :

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

What you want is:

time_var = dataset.variables['time']

Then:

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

Should work as expected.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM