2016-11-11 74 views
1

我使用xarray从openDAP服务器读取单点数据,然后将xarray对象转换为数据框。这工作正常。我希望在一次通话中阅读多个要点,但我并不认为这是最好的方法。使用xarray读取多个坐标

这是我使用单点代码:

import pandas as pd 
import xarray as xr 

url = 'http://nomads.ncep.noaa.gov:9090/dods/gfs_0p25/gfs20161111/gfs_0p25_00z' 
lats = [40.1,40.5,42.3] 
lons = [1.02,1.24,1.84] 
vars = ['dswrfsfc', 'tmp2m', 'pressfc'] 

ds = xr.open_dataset(url) 

data_single = ds.sel(lon=lons[0], lat=lats[0], method='nearest')  
ts_dataframe_single = data_single[vars].to_dataframe() 

对于读取多个点我做的:

data = ds.sel(lon=lons, lat=lats, method='nearest') 
ts_dataframe = data[vars].to_dataframe() 

这是data.coords输出:

data.coords 
Out[10]: 
Coordinates: 
    * time  (time) datetime64[ns] 2016-11-11 2016-11-11T03:00:00 ... 
    * lev  (lev) float64 1e+03 975.0 950.0 925.0 900.0 850.0 800.0 750.0 ... 
    * lat  (lat) float64 40.0 40.5 42.25 
    * lon  (lon) float64 1.0 1.25 1.75 

当我转换为数据帧时,生成的对象包含时间和坐标的混合时间戳中的ates。这是它的外观:

dataframe containg multiple points

我的问题是:

  • 这是检索与xarray多点的最佳方式?
  • 如何从结果数据框的单个点提取数据?

在此先感谢!

回答

3

我想你想sel_points而不是sel。所以,这样的事情:

data = ds.sel_points(lon=lons, lat=lats, method='nearest') 
ts_dataframe = data[vars].to_dataframe() 
+0

谢谢@jhamman,这个方法应该可以完成这项工作。事情是,当我运行命令'data = ds.sel_points(lon = lons,lat = lats,method ='nearest')'时,计算机开始思考并且RAM内存使用率上升,直到我松开控制计算机。这是正常的吗?难道我做错了什么? –

1

另一种方法是切片

data = ds.sel(lat=slice(40.1,42.3), lon=slice(1.02,1.84))

但是,你得到更多的积分比你提出的要求。虽然这很快。