标签: python-xarray

xarray 波周期(以秒为单位)摄取为 timedelta64

测量海浪周期的变量的“单位”属性以“秒”为单位。这不是日期时间字段,但 xarray 会自动将此变量提取为 timedelta64。由于单位不是“自...以来的秒数”,我认为 xarray 应该将其视为普通的 float32 数据数组,但显然并非如此。有没有办法让我告诉 xarray 将波浪周期变量作为 float32 摄取,或者在摄取后将它们从 timedelta64 转换回原始值?我仍然希望它将“时间”变量转换为 timedelta64,所以我不想关闭整个数据集的翻译,而只是针对特定变量(Tper、sper、wper)。

以下是我在 TDS 服务器中的波浪预测中使用的基本 OPeNDAP URL:

http://oos.soest.hawaii.edu/thredds/dodsC/hioos/model/wav/ww3/hawaii/WaveWatch_III_Hawaii_Regional_Wave_Model_best.ncd

建议?谢谢!

您可以使用此处的 OPeNDAP 页面查看类似“ncdump”的输出:

http://oos.soest.hawaii.edu/thredds/dodsC/hioos/model/wav/ww3/hawaii/WaveWatch_III_Hawaii_Regional_Wave_Model_best.ncd.html

或者您可以在 OPeNDAP URL 上运行 ncdump,如下所示:

ncdump -h http://oos.soest.hawaii.edu/thredds/dodsC/hioos/model/wav/ww3/hawaii/WaveWatch_III_Hawaii_Regional_Wave_Model_best.ncd

结果如下:

netcdf WaveWatch_III_Hawaii_Regional_Wave_Model_best {
dimensions:
        lat = 101 ;
        lon = 141 ;
        time = 54453 ;
        z = 1 ;
variables:
        float lon(lon) ;
                lon:units = "degrees_east" ;
                lon:long_name = "longitude" ;
                lon:standard_name = "longitude" ;
                lon:short_name = "lon" ;
                lon:axis = "x" ;
                lon:_CoordinateAxisType …
Run Code Online (Sandbox Code Playgroud)

python netcdf opendap python-xarray

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

xarray数据集groupby的分位数方法

我有一个经典的 xarray 数据集。这些是月度数据(38 年的月度数据)。

\n\n

我有兴趣分别计算每个月的分位数值。

\n\n
<xarray.Dataset>\nDimensions:        (lat: 26, lon: 71, time: 456)\nCoordinates:\n  * lat            (lat) float32 25.0 26.0 27.0 28.0 29.0 30.0 31.0 32.0 ...\n  * lon            (lon) float32 -130.0 -129.0 -128.0 -127.0 -126.0 -125.0 ...\n  * time           (time) datetime64[ns] 1979-01-31 1979-02-28 1979-03-31 ...\nData variables:\n    var1         (time, lat, lon) float32 nan nan nan nan nan nan nan nan ...\n    var2         (time, lat, lon) float32 nan nan nan nan nan nan nan nan ...\n    var3         (time, lat, lon) float32 …
Run Code Online (Sandbox Code Playgroud)

quantile python-xarray pandas-groupby

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

如何将数组中的零转换为Nan?

在此输入图像描述

我使用了temp[temp==0] = np.nan,但出现了这个错误:

IndexError:不支持二维布尔索引。

python arrays indexing numpy python-xarray

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

xarray/datetime64[ns]:从日期时间中删除或标准化时间

我有一个arr带有坐标“时间”的数据数组。 arr:

    <xarray.DataArray 'T' (time: 731)>
array([244.40161, 244.39998, ..., 244.40936, 244.40549], dtype=float32)
Coordinates:
  * time         (time) datetime64[ns] 1979-01-01T09:00:00 ... 1980-12-31T09:00:00
Run Code Online (Sandbox Code Playgroud)

提取前5个时间坐标, arr.time.values[:5]

array(['1979-01-01T09:00:00.000000000', '1979-01-02T09:00:00.000000000',
       '1979-01-03T09:00:00.000000000', '1979-01-04T09:00:00.000000000',
       '1979-01-05T09:00:00.000000000'], dtype='datetime64[ns]')
Run Code Online (Sandbox Code Playgroud)

我希望我的日期时间的格式只是 等'1979-01-01''1979-01-02'没有时间,或者将时间标准化为 00:00:00。

pandas 数据框架有一些解决方案,但我不太确定如何在这里应用它们,因为这些函数不适用(在 datetime、Timestamp 和 datetime64 之间转换使用 pandas.to_datetime 时仅保留日期部分

python-xarray

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

将 DataArray 转换为 numpy 数组

我有一个 DataArray,我想将其转换为 numpy 数组。作为参考,它是一个包含(时间、纬度、经度)的三维网格数据集。我尝试使用 xarray.DataArray.values(),但收到错误: TypeError: 'property' object is not callable。

我想将其转换为 numpy 数组,因为我使用的函数利用了重塑功能,并且无法与 DataArray 一起正常工作。我尝试使用 np.array() 将其简单地转换为 numpy 数组,但它会将每个值转换为 NaN。

datatlt=xr.open_dataset("/nfs/home11/staff/lzhou/Public/Satellite_data/RSS_Tb_Anom_Maps_ch_TLT_V4_0.nc", decode_times=False)

tlt=datatlt['brightness_temperature'].sel(months=slice(121,492))
tlt2=np.ma.masked_invalid(tlt)

tlt2=xr.DataArray.values(tlt2)
Run Code Online (Sandbox Code Playgroud)

python numpy python-xarray

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

计算 xarray 中缺失数据的相关性

我正在尝试计算 xarray 中两个数据集沿时间维度的相关性。我的数据集都是纬度 x 经度 x 时间。我的一个数据集有足够的数据丢失,这对于插值和消除间隙是不合理的,相反,我想忽略丢失的值。我有一些简单的代码可以在一定程度上发挥作用,但没有一个适合我的具体用例。例如:

def covariance(x,y,dims=None):
    return xr.dot(x-x.mean(dims), y-y.mean(dims), dims=dims) / x.count(dims)

def correlation(x,y,dims=None):
    return covariance(x,y,dims) / (x.std(dims) * y.std(dims))
Run Code Online (Sandbox Code Playgroud)

如果没有丢失数据,则效果很好,但当然不能与 nan 一起使用。虽然这里有一个为 xarray 编写的很好的例子,但即使使用这段代码,我仍在努力计算皮尔逊的相关性而不是斯皮尔曼的相关性。

import numpy as np
import xarray as xr
import bottleneck

def covariance_gufunc(x, y):
    return ((x - x.mean(axis=-1, keepdims=True))
            * (y - y.mean(axis=-1, keepdims=True))).mean(axis=-1)

def pearson_correlation_gufunc(x, y):
    return covariance_gufunc(x, y) / (x.std(axis=-1) * y.std(axis=-1))

def spearman_correlation_gufunc(x, y):
    x_ranks = bottleneck.rankdata(x, axis=-1)
    y_ranks = bottleneck.rankdata(y, axis=-1)
    return pearson_correlation_gufunc(x_ranks, y_ranks)

def spearman_correlation(x, y, …
Run Code Online (Sandbox Code Playgroud)

python numpy correlation python-xarray

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

Python 使用 xarray 从 NETCDF 文件中提取多个纬度/经度

我有一个 NC 文件(时间、纬度、经度)从这里下载,我正在尝试提取多个站点的时间序列(纬度/经度点从这里下载)。所以我尝试用这种方式读取坐标并从 NC 文件中提取最接近的值:

import pandas as pd
import xarray as xr
nc_file = r"C:\Users\lab\Desktop\harvey\example.nc"
NC = xr.open_dataset(nc_file)
csv = r"C:\Users\lab\Desktop\harvey\stations.csv"
df = pd.read_csv(csv,delimiter=',')
Newdf = pd.DataFrame([])
# grid point lists
lat = df["Lat"]
lon = df["Lon"]
point_list = zip(lat,lon)
for i, j in point_list:
    dsloc = NC.sel(lat=i,lon=j,method='nearest')
    DT=dsloc.to_dataframe()
    Newdf=Newdf.append(DT,sort=True)
Run Code Online (Sandbox Code Playgroud)

该代码工作正常并返回:

                        EVP     lat      lon
time                                        
2019-01-01 19:00:00  0.0546  40.063  -88.313
2019-01-01 23:00:00  0.0049  40.063  -88.313
2019-01-01 19:00:00  0.0052  41.938  -93.688
2019-01-01 23:00:00  0.0029  41.938  -93.688 …
Run Code Online (Sandbox Code Playgroud)

python netcdf data-extraction pandas python-xarray

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

如何细分/细化 xarray 数据集中的维度?

摘要:我有一个数据集,其收集方式使得维度最初不可用。我想获取本质上是一大块无差别的数据,并为其添加维度,以便可以对其进行查询、子集化等。这是以下问题的核心。

这是我拥有的 xarray 数据集:

<xarray.Dataset>
Dimensions:  (chain: 1, draw: 2000, rows: 24000)
Coordinates:
  * chain    (chain) int64 0
  * draw     (draw) int64 0 1 2 3 4 5 6 7 ... 1993 1994 1995 1996 1997 1998 1999
  * rows     (rows) int64 0 1 2 3 4 5 6 ... 23994 23995 23996 23997 23998 23999
Data variables:
    obs      (chain, draw, rows) float64 4.304 3.985 4.612 ... 6.343 5.538 6.475
Attributes:
    created_at:                 2019-12-27T17:16:13.847972
    inference_library:          pymc3
    inference_library_version:  3.8
Run Code Online (Sandbox Code Playgroud)

这里的维度rows …

python pandas python-xarray

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

将 xarray 数据变量重新分配给 xarray 坐标

我有一个 pandas 空间数据数据框,我想将其转换为 netCDF。我找到了 xarray 的方法并将我的数据框转换为 xarray 数据集:

# create xray Dataset from Pandas DataFrame
xr = xarray.Dataset.from_dataframe(df)
Run Code Online (Sandbox Code Playgroud)

现在,我想将lonlat变量设置为 xarray 数据集的坐标。我已经尝试过xarray.Dataset.assign_coords,但似乎无法让它发挥作用?

我的 xarray 数据集如下所示:

<xarray.Dataset>
Dimensions:  (index: 58705)
Coordinates:
  * index    (index) int64 0 1 2 3 4 5 6 ... 58699 58700 58701 58702 58703 58704
Data variables:
    x_km     (index) float64 5.274e+03 5.273e+03 ... 2.873e+03 2.873e+03
    y_km     (index) float64 0.0 46.02 92.03 138.0 ... -75.23 -50.15 -25.07 -0.0
    z_km     (index) float64 3.575e+03 3.575e+03 …
Run Code Online (Sandbox Code Playgroud)

python netcdf dataframe python-xarray

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

如何使用 sel 更改 xarray.DataArray 中的单个条目?

我想要操作 xarray.DataArray 内的数据,但是,它无法更改 DataArray 中的各个条目。

例子:

import numpy as np
import xarray as xr
data = np.random.rand(2,2)
times = [1998,1999]
locations = ['It','Be']

A = xr.DataArray(data, coords = [times, locations], dims = [time, space])
Run Code Online (Sandbox Code Playgroud)

这给了我一个 DataArray。现在我想手动将 (1998,'It') 的条目设置为 5,但以下方法不起作用:

A.sel(time = 1998, space = 'It').values = 5
Run Code Online (Sandbox Code Playgroud)

这都不起作用:

A.sel(time = 1998, space = 'It').values = array(5)
Run Code Online (Sandbox Code Playgroud)

数据保持原样。然而,奇怪的是,以下效果很好:

A.sel(time = 1998).values[0] = 5
Run Code Online (Sandbox Code Playgroud)

你能解释一下这背后的逻辑吗?

python python-xarray

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