标签: python-xarray

python-xarray rename data variable

I've created a xarray.DataArray and I save it using xarray.DataArray.to_netcdf.

I create it using:

datatmp = np.full([nens, len(modanom.coords['time'].values), len(modanom.coords['latitude'].values), len(modanom.coords['longitude'].values)], np.nan)
b = xr.DataArray(datatmp, coords=[range(1,nens + 1), modanom.coords['time'], modanom.coords['latitude'], modanom.coords['longitude']], dims=['ensemble', 'time', 'latitude', 'longitude'])
Run Code Online (Sandbox Code Playgroud)

i.e. I don't specify a name such as:

b = xr.DataArray({'windspeed': (('ensemble', 'time', 'latitude', 'longitude'), datatmp)}, coords=[range(1,nens + 1), modanom.coords['time'], modanom.coords['latitude'], modanom.coords['longitude']], dims=['ensemble', 'time', 'latitude', 'longitude'])
Run Code Online (Sandbox Code Playgroud)

I do some manipulation of this file and obtain root mean square error and the resultant xarray.Dataset is

<xarray.DataArray …
Run Code Online (Sandbox Code Playgroud)

python-xarray

2
推荐指数
2
解决办法
1万
查看次数

在 xarray 数据集中组合 DataArray

是否有比 xarray 数据集中的所有 DataArray 更好的求和方法

sum(d for d in ds.data_vars.values())
Run Code Online (Sandbox Code Playgroud)

这有效,但似乎有点笨拙。是否有等价于对 Pandas DataFrame 列求和?

请注意该ds.sum()方法适用于每个 DataArrays - 但我想组合 DataArrays。

python python-xarray

2
推荐指数
1
解决办法
707
查看次数

xarray - 将字符串存储为 'string' 数据类型而不是 Python2.7 的 'char'(n 维字符数组)

我正在使用 xarray 将文本文件转换为 netCDF 格式。当我使用 netCDF4 格式和 Python3 时,它将字符串变量存储为字符串,但当我使用 Python2 时,它将它们存储为 n 维字符数组。我试图在编码中设置 dtype='str' 并且没有任何区别。有没有办法使用 Python2 使这些变量具有字符串数据类型?任何想法将不胜感激。

这是我的代码:

import pandas as pd
import xarray as xr

column_names = ['timestamp', 'air_temp', 'vtempdiff', 'rh', 'pressure', 'wind_dir', 'wind_spd']

df = pd.read_csv(args.input_file, skiprows = 1, header=None, names = column_names)
ds = xr.Dataset.from_dataframe(df)

encoding = {'timestamp': {'dtype': 'str'},
            'air_temp': {'_FillValue': 9.96921e+36, 'dtype': 'f4'}
            }

ds.to_netcdf(op_file.nc, format = 'NETCDF4', unlimited_dims={'time':True}, encoding = encoding)
Run Code Online (Sandbox Code Playgroud)

当我使用 Python3.6 对 op_file.nc 进行 ncdump 时,我得到:

netcdf op_file {
dimensions:
    time = …
Run Code Online (Sandbox Code Playgroud)

python netcdf python-xarray netcdf4 xarray

2
推荐指数
1
解决办法
1010
查看次数

使用 xarray 为变量分配新坐标

我有一个 .nc 文件作为 xarray 中的数据集打开,其结构如下:

ds

<xarray.Dataset>
Dimensions:    (lat: 733, lon: 720, time: 204)
Coordinates:
  * time       (time) int16 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ...
Dimensions without coordinates: lat , lon
Data variables :
    latitude   (lat) float32 56.0 55.9917 55.9833 55.975 55.9667 55.9583 ...
    longitude  (lon) float32 -11.0 -10.9917 -10.9833 -10.975 -10.9667 ...
    n2o        (lat, lon, time) float64 nan nan nan nan nan nan nan nan …
Run Code Online (Sandbox Code Playgroud)

python netcdf python-xarray

2
推荐指数
1
解决办法
4304
查看次数

屏蔽 xarray 中的数据并更改 True 和 False 响应的值

我有一个 xarray DataArray,其中包含多天的数据。我可以使用 .where 函数为一个条件屏蔽它,但我想让所有值超过某个值 1 并且所有值低于该值 0。理想情况下,我还想确保任何 np.数据集中的 nans 没有改变,但这不是必需的。

import numpy as np
import xarray as xr

dval = np.random.randint(5,size=[3,4,4])
x = [0,1,2,3]
y = [0,1,2,3]
time = ['2017-10-13','2017-10-12','2017-10-11']

a = xr.DataArray(dval,coords=[time,x,y],dims=['time','x','y'])
a = a.where(a>2,1,0) #ideally this would work as (condition,True val, False val)
Run Code Online (Sandbox Code Playgroud)

这会导致“如果 drop=True 则无法设置‘其他’”的 ValueError

对此的任何帮助将不胜感激。

python-3.x python-xarray data-masking

2
推荐指数
1
解决办法
2686
查看次数

使用 xarray 滚动分位数

有没有xArray办法在DataArray.rolling窗口上计算分位数?列出的可用方法包括meanmedian,但没有关于分位数/百分位数。我想知道这是否可以以某种方式完成,即使没有直接的方法。

目前,我正在本地将xArray数据迁移到 a pandas.DataFrame,我在其中应用了rolling().quantile()序列。之后,我采用新的值DataFramexArray.DataArray从中构建一个。可重现的代码:

import xarray as xr
import pandas as pd
import numpy as np

times = np.arange(0, 30)
locs = ['A', 'B', 'C', 'D'] 

signal = xr.DataArray(np.random.rand(len(times), len(locs)), 
                      coords=[times, locs], dims=['time', 'locations'])
window = 5

df = pd.DataFrame(data=signal.data)
roll = df.rolling(window=window, center=True, axis=0).quantile(.25).dropna()
window_array = xr.DataArray(roll.values, 
            coords=[np.arange(0, signal.time.shape[0] - window + 1), signal.locations], 
            dims=['time', 'locations'])
Run Code Online (Sandbox Code Playgroud)

欢迎任何xArray尽可能多地坚持的线索。

让我们考虑同样的问题,只是规模更小(10 个时间实例,2 个位置)。 …

python quantile python-xarray

2
推荐指数
1
解决办法
640
查看次数

为什么 numpy.angle() 不是 ufunc?

为什么numpy.angle()不是一个 numpy 通用函数(ufunc)?

它似乎符合numpy 文档中ufunc 的标准,但未列为其中之一。

我认为它可能不符合定义,因为它转换了数字的类型(从复数到实数),但是已经有其他 ufunc 可以做到这一点(例如np.absolute)。

我遇到这个是因为我试图np.angle直接应用于包含复数的 xarray DataArray,它返回一个 numpy 数组而不是 xarray DataArray。我认为它这样做是因为它不是一个 numpy ufunc,并且 xarray 会检查它。

python numpy python-xarray

2
推荐指数
1
解决办法
175
查看次数

如何调用xarray的groupby函数按年和月的组合对数据进行分组

我有一个 DataArray 对象,用于跨越几年的日常数据集。这有一个变量和三个维度,分别命名为latitude,longitudetime(daily)。时间坐标就像time (time) datetime64[ns] 2016-01-01 2016-01-02 ... 2018-12-31

我想通过 DataArray 的 groupby 函数按年和月的组合对数据进行分组。但是下面的代码只给了我 中的时间坐标int64,比如 1, 2, 3, ..., 12。

da_groupby_monthly = da.groupby('time.month').sum('time')
print(da_groupby_monthly)
Run Code Online (Sandbox Code Playgroud)

输出:

<xarray.DataArray (month: 12, latitude: 106, longitude: 193)>
dask.array<shape=(12, 106, 193), dtype=int32, chunksize=(1, 106, 193)>
Coordinates:
  * latitude   (latitude) float32 -39.2 -39.149525 ... -33.950478 -33.9
  * longitude  (longitude) float32 140.8 140.84792 140.89584 ... 149.95209 150.0
  * month      (month) int64 1 2 3 4 5 6 7 8 …
Run Code Online (Sandbox Code Playgroud)

python numpy pandas python-xarray

2
推荐指数
2
解决办法
2107
查看次数

异步 Xarray 写入 Zarr

全部。我正在使用 Dask 分布式集群在循环内编写 Zarr+Dask 支持的 Xarray 数据集,并且dataset.to_zarr正在阻塞。当存在阻碍循环继续的散乱块时,这确实会减慢速度。有没有办法.to_zarr异步执行,以便循环可以继续下一个数据集写入而不会被一些落后的块所阻碍?

dask python-xarray zarr

2
推荐指数
1
解决办法
380
查看次数

在 Google Colaboratory Notebook 上安装 GeoViews

是否可以在 Google Colaboratory 笔记本上安装地理视图,以便我可以使用它来绘制来自Xarray数据集的数据?

python-xarray geoviews google-colaboratory

2
推荐指数
1
解决办法
488
查看次数