含地理数据的Pandas DataFrame转NetCDF耗时过长优化问题
Pandas点数据集转NetCDF文件方案
我有如下结构的Pandas DataFrame:
lat lon value 10 10 1
该数据集共包含700万条数据点,需要将其转换为数组最终生成NetCDF文件,此前尝试过两种方案:
- 借助GDAL将DataFrame转换为点shapefile,再通过QGIS将shapefile转为栅格,该方案在8核M1处理器上仅需3-4分钟,但存在少量信息损失。
- 直接将Pandas DataFrame转换为数组后写入.nc文件,代码通过joblib并行化,但预估在超级计算机18核Intel CPU上需要运行120小时,代码如下:
lati=np.round(np.linspace(np.min(df.lat),np.max(df.lat),lat_range+1),2) loni=np.round(np.linspace(np.min(df.lon),np.max(df.lon),lon_range+1),2) target_column = 'soil_moisture' search_columns = ['lat','lon'] df_temp = df.set_index(search_columns) def func(i,j): latitude= lati[i] longitude=loni[j] search_values = [latitude, longitude] value = df_temp.loc[tuple(search_values), target_column] return(value) from joblib import Parallel, delayed results= Parallel(n_jobs=-1, verbose=2)(delayed(func)(i, j) for i in range(lat_range+1) for j in range(lon_range+1)) m=np.reshape(results, (lat_range+1,lon_range+1))
该代码在测试数据集上运行正常,但在全量数据集上耗时极长。
最优实现方案
经过验证,最优方案是将Pandas DataFrame转换为xarray后再导出为NetCDF,运行效率极高,代码如下:
xr=df.set_index(['lat', 'lon']).to_xarray() xr.to_netcdf(path='./new.nc', mode='w')
内容的提问来源于stack exchange,提问作者nirdesh k sharma
相关产品推荐
相关产品推荐

