问题
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 e.g.
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!
回答1:
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, i.e. 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.
来源:https://stackoverflow.com/questions/33985339/python-read-data-from-netcdf-file-with-time-as-seconds-since-beginning-of-me