如何更有效地从python的netCDF文件中提取数据?

问题描述

我编写了以下代码来从几个netCDF文件提取数据。每个半小时的时间段(即4天的数据)中,我有192个文件。我考虑了10个纬度和10个经度值(即100个数据点)。

输出中,我获得了行中的192个时间步长以及列中不同点的数据。

输出是我想要的,但是我认为代码效率不高。

import glob
from netCDF4 import Dataset
import pandas as pd
import numpy as np

#Record all the years of the netCDF files into a python list

all_hh = []   # ##all_years is a python list
date_range = pd.date_range(start = str(2000)+'-12-30',end = str(2001)+'-01-03',freq ='30 min')
d_range_mod = date_range.drop(pd.Timestamp("2001-01-03T00:00:00.000000000"))
lng = range(0,10,1)
ltd = range(0,1)

intn = []
for file in glob.glob('*.nc4'):
    # print(file)
    data = Dataset(file,'r')
    all_hh.append(file)
    
for i in all_hh:
    data = Dataset(i,'r')
    temp = data.variables['precipitationCal']    
    for x in lng:
        for y in ltd:
            inten = temp[0,x,y]
            intn.append(inten)

df1 = pd.DataFrame(intn,columns=['Intensity (mm/hr)'])
df2 = np.array(df1)
df3 = np.reshape(df2,(192,100))
df4 = pd.DataFrame(df3,index = d_range_mod)
    
df4.to_excel('intensity_tS.xlsx')    

解决方法

这可以通过xarray轻松完成:

import xarray as xr

(
xr.open_mfdataset(glob.glob('*.nc4'))
.to_dataframe()
.to_excel('intensity_tS.xlsx')
      )

显然,要进行一些修改,具体取决于数据文件中的内容。