标签: python-xarray

沿轴将 3 维 xr.DataArray (Xarray) 展平/拆开/折叠成 2 维?

我有一个数据集,我在其中存储不同类/子类型的副本(不确定该叫什么),然后是每个类的属性。本质上,有 5 个亚型/类,每个亚型/类有 4 个重复,并且测量了 100 个属性。

是否有类似np.ravelnp.flatten可以使用 2 维合并的方法Xarray

在这里,我想合并暗淡subtypereplicates所以我有一个二维数组(或pd.DataFrame带有attributes vs. subtype/replicates.

它不需要具有“coord_1 | coord_2”或任何格式。如果保留原始坐标名称会很有用。也许有类似的东西groupby可以做到这一点?Groupby总是让我感到困惑,所以如果它是原生的xarray,那就太棒了。

import xarray as xr
import numpy as np

# Set up xr.DataArray
dims = (5,4,100)
DA_data = xr.DataArray(np.random.random(dims), dims=["subtype","replicates","attributes"])
DA_data.coords["subtype"] = ["subtype_%d"%_ for _ in range(dims[0])]
DA_data.coords["replicates"] = ["rep_%d"%_ for _ in range(dims[1])]
DA_data.coords["attributes"] = ["attr_%d"%_ for _ in range(dims[2])]

# DA_data.coords
# Coordinates: …
Run Code Online (Sandbox Code Playgroud)

python arrays multidimensional-array pandas python-xarray

4
推荐指数
1
解决办法
1366
查看次数

从 Xarray 中的 `xr.Dataset` 获取值(点、向量、数组等)?(蟒蛇 3)

我不知道如何从xr.Dataset对象中实际提取数据。我不知道如何访问单个值。如何像使用 DataArrays 一样从数据集中提取值(点值、向量、数组等)?

np.random.seed(0)
DA_data = xr.DataArray(np.random.random((3,2,10,100)), dims=["targets","accuracy","metrics","attributes"], name="Data")
DA_data.coords["attributes"] = ["attr_%d"%_ for _ in range(100)]
# DA_data.coords
# Coordinates:
#   * targets     (targets) int64 0 1 2
#   * accuracy    (accuracy) int64 0 1
#   * metrics     (metrics) int64 0 1 2 3 4 5 6 7 8 9
#   * attributes  (attributes) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

# Indexing DataArray
#DA_data.sel(targets=0, accuracy=0, …
Run Code Online (Sandbox Code Playgroud)

python arrays dataset multidimensional-array python-xarray

4
推荐指数
1
解决办法
2709
查看次数

使用 x 数组计算年平均值

我有一个python xarray数据集,time,x,y其维度和value1变量。我正在尝试计算value1每个x,y坐标对的年平均值。

我在阅读文档时遇到了这个功能:

ds.groupby('time.year').mean()  
Run Code Online (Sandbox Code Playgroud)

这似乎是计算每个给定时间片中所有 x,y坐标对的单个年平均值, 而不是value1每个给定时间片中单个坐标对
的年平均值。 x,y

虽然上面的代码片段产生了错误的输出,但我对其过于简化的形式非常感兴趣。我真的很想找出“X-arrays 技巧”来为给定的x,y坐标对计算年平均值,而不是自己将其组合在一起。

有人指出我正确的方向吗?我应该暂时把它变成一个pandas对象吗?

time-series python-xarray

4
推荐指数
1
解决办法
1797
查看次数

使用 xarray 读取多个坐标

我使用 xarray 从 openDAP 服务器读取单点数据,然后将 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()
Run Code Online (Sandbox Code Playgroud)

为了阅读多个要点,我这样做:

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

这是输出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 …
Run Code Online (Sandbox Code Playgroud)

python-2.7 python-xarray

4
推荐指数
1
解决办法
4560
查看次数

抑制 python-xarray 的警告

我正在运行以下代码

positive_values = values.where(values > 0)  
Run Code Online (Sandbox Code Playgroud)

在这个例子中values可能包含nan元素。我相信由于这个原因,我收到以下运行时警告:

RuntimeWarning: invalid value encountered in greater_equal if not reflexive  
Run Code Online (Sandbox Code Playgroud)

是否xarray有抑制这些警告的方法?

python suppress-warnings python-3.x python-xarray

4
推荐指数
1
解决办法
531
查看次数

netCDF4.Dataset 到 xarray Dataset 的简单转换

我知道如何手动将 netCDF4.Dataset 转换为 xarray DataArray。但是,我想知道是否有任何简单而优雅的方法,例如使用 xarray 后端,将以下“netCDF4.Dataset”对象简单转换为 xarray DataArray 对象:

<type 'netCDF4.Dataset'>
root group (NETCDF4 data model, file format HDF5):
    Originating_or_generating_Center: US National Weather Service, National Centres for Environmental Prediction (NCEP)
    Originating_or_generating_Subcenter: NCEP Ensemble Products
    GRIB_table_version: 2,1
    Type_of_generating_process: Ensemble forecast
    Analysis_or_forecast_generating_process_identifier_defined_by_originating_centre: Global Ensemble Forecast System (GEFS)
    Conventions: CF-1.6
    history: Read using CDM IOSP GribCollection v3
    featureType: GRID
    History: Translated to CF-1.0 Conventions by Netcdf-Java CDM (CFGridWriter2)
Original Dataset = /data/ldm/pub/native/grid/NCEP/GEFS/Global_1p0deg_Ensemble/member/GEFS_Global_1p0deg_Ensemble_20170926_0600.grib2.ncx3#LatLon_181X360-p5S-180p0E; Translation Date = 2017-09-26T17:50:23.259Z
    geospatial_lat_min: 0.0
    geospatial_lat_max: 90.0
    geospatial_lon_min: 0.0 …
Run Code Online (Sandbox Code Playgroud)

python netcdf python-xarray python-siphon

4
推荐指数
1
解决办法
1669
查看次数

如何乘以 Python Xarray 数据集?

我正在使用xarray.open_mfdataset()函数读取多个 netCDF 格式的数据文件(WRF 模型输出文件)。我读和destaggering各种变量,如变量QVAPORUVRESP。我正在使用以下代码读取 netCDF 变量并计算结果变量UQ

import xarray as xr

def desta_var(pp,var):
    flnm = xr.open_mfdataset(pp)
    if var=="U":
        U1 = (flnm.variables[var])
        U = 0.5*(U1[:,:,:,0:-1] + U1[:,:,:,1:] )
        del U1
        return U
    elif var=="V":
        V1 = (flnm.variables[var])
        V=0.5*(V1[:,:,0:-1,:] + V1[:,:,1:,:])
        del V1
        return V
    else:
        W1 = (flnm.variables[var])
        W=0.5*(W1[:,0:-1,:,:] + W1[:,1:,:,:])
        del W1
        return W

 U=desta_var('./WRF_3D_2005_*.nc','U')
 V=desta_var('./WRF_3D_2005_*.nc','V')

 flnm=xr.open_mfdataset('./WRF_3D_2005_*.nc')

 QV = flnm.QVAPOR
 UQ = U*QV
Run Code Online (Sandbox Code Playgroud)

使用上述代码获得的变量的维度和形状:

风变量的维数 Ex。U它的形状是

Times, lev, y, …

python netcdf python-xarray xarray

4
推荐指数
1
解决办法
2555
查看次数

在时间维度中对 xarray 数据集或数据数组进行子集化

我正在尝试计算 xarray 数据集中时间维度子集的每月气候。时间是使用 datetime64 定义的。

如果我想使用整个时间序列,这很好用:

monthly_avr=ds_clm.groupby('time.month').mean(dim='time')
Run Code Online (Sandbox Code Playgroud)

但我真的只想要比 2001 年大的年份。这些都不起作用:

monthly_avr2=ds_clm.where(ds_clm.time>'2001-01-01').groupby('time.month').mean('time')
monthly_avr3=ds_clm.isel(time=slice('2001-01-01', '2018-01-01')).groupby('time.month').mean('time')
Run Code Online (Sandbox Code Playgroud)

这是我的数据集的样子:

<xarray.Dataset>
Dimensions:       (hist_interval: 2, lat: 192, lon: 288, time: 1980)
Coordinates:
  * lon           (lon) float32 0.0 1.25 2.5 3.75 5.0 6.25 7.5 8.75 10.0 ...
  * lat           (lat) float32 -90.0 -89.057594 -88.11518 -87.172775 ...
  * time          (time) datetime64[ns] 1850-01-31 1850-02-28 1850-03-31 ...
Dimensions without coordinates: hist_interval
Data variables:
EFLX_LH_TOT   (time, lat, lon) float32 0.26219246 0.26219246 0.26219246 ...
Run Code Online (Sandbox Code Playgroud)

有谁知道使用 datetime64 进行时间子集化的正确语法?

python-xarray

4
推荐指数
1
解决办法
5450
查看次数

将 cftime.DatetimeJulian 转换为日期时间

我正在尝试将xarray数据数组转换为机器学习项目的 Pandas 数据帧,但时间数据的cftime.DatetimeJulian格式似乎无法使用 Pandasto_datetime()方法进行转换。建议?谢谢。

nor_xr.time

<xarray.DataArray 'time' (time: 1372)>
array([cftime.DatetimeJulian(2015, 3, 31, 0, 0, 0, 0, 0, 90),
       cftime.DatetimeJulian(2018, 12, 31, 0, 0, 0, 0, 6, 365)], dtype=object)
Coordinates:
  * time     (time) object 2015-03-31 00:00:00 ... 2018-12-31 00:00:00
Attributes:
    standard_name:  time
    axis:           T

nor_df = nor_xr.to_dataframe().reset_index()
nor_df.head()

    time
0   2015-03-31 00:00:00
1   2015-04-01 00:00:00

pd.to_datetime(nor_df.time)

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-104-1f0fc00ad825> in <module>
      2 
      3 #|nor_df.time.unique()
----> 4 pd.to_datetime(nor_df.time)

~\AppData\Local\Continuum\anaconda3A\lib\site-packages\pandas\core\tools\datetimes.py in to_datetime(arg, …
Run Code Online (Sandbox Code Playgroud)

python pandas python-xarray

4
推荐指数
1
解决办法
5001
查看次数

xarray - 如何重命名 DataArray 对象上的维度

我有一个名为 rio 的 DataArray 对象。

In [59]: rio
Out[59]: 
<xarray.DataArray (band: 1, y: 106, x: 193)>
array([[[0, 0, ..., 0, 0],
        [0, 0, ..., 0, 0],
        ...,
        [0, 0, ..., 0, 0],
        [0, 0, ..., 0, 0]]], dtype=uint8)
Coordinates:
  * band     (band) int32 1
  * y        (y) float64 -33.9 -33.95 -34.0 -34.05 ... -39.05 -39.1 -39.15 -39.2
  * x        (x) float64 140.8 140.8 140.9 140.9 ... 149.9 149.9 150.0 150.0
Attributes:
    transform:   (0.04791259799999997, 0.0, 140.776046753, 0.0, -0.0504760740...
    crs:         +init=epsg:4326
    res: …
Run Code Online (Sandbox Code Playgroud)

python-xarray

4
推荐指数
1
解决办法
4572
查看次数