问题标签 [python-xarray]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
352 浏览

python - 使用底图在 Python 中重新网格化 3-D 卫星数据时出错,2-D 有效

我有以下问题:

我有来自不同卫星的云层数据集,我想将其重新网格化到气候模型的网格上,以便在模型输出和观测到的卫星数据之间进行比较。

现在我正在使用底图中的 interp 函数,它对以下形状的数组非常有效:1 x 经度 x 纬度,但它不适用于形状为 nx 经度 x 纬度的数组。重新排列这些 3-D 数组的最佳方法是什么?

我的问题是,当我尝试使用 3-D 数据时,我收到以下形式的错误消息,在我的情况下,数组的形式为 161(这是每个月的云量!)x lon x lat

这就是它产生的错误:

0 投票
2 回答
3717 浏览

python - Add 'constant' dimension to xarray Dataset

I have a series of monthly gridded datasets in CSV form. I want to read them, add a few dimensions, and then write to netcdf. I've had great experience using xarray (xray) in the past so thought I'd use if for this task.

I can easily get them into a 2D DataArray with something like:

But when I try to add another dimension, which would convey information about time (all data is from the same year/month), things start to go sour.

I've tried two ways to crack this:

1) expand my input data to m x n x 1, something like:

Then I follow the same steps as above, with coords updated to contain a third dimension.

This is fine for creating a DataArray -- but when I try to convert to a dataset (so I can write to netCDF), I get an error about 'ValueError: Coordinate objects must be 1-dimensional'

2) The second approach I've tried is taking my dataarray, casting it to a dataframe, setting the index to ['lat','lng', 'time'] and then going back to a dataset with xr.Dataset.from_dataframe(). I've tried this -- but it takes 20+ min before I kill the process.

Does anyone know how I can get a Dataset with a monthly 'time' dimension?

0 投票
2 回答
1555 浏览

python - Python xarray.concat 然后 xarray.to_netcdf 生成巨大的新文件大小

所以我有 3 个 netcdf4 文件(每个大约 90 MB),我想使用包 xarray 连接它们。每个文件都有一个变量 (dis),以 0.5 度分辨率(纬度、经度)表示 365 天(时间)。我的目标是连接三个文件,使我们有 1095 天(3 年)的时间序列。

每个文件(对于 2007 年、2008 年、2009 年)具有: 1 个变量:dis 3 个坐标:时间、纬度、经度......

我将它们导入并使用 concat 模块进行连接,我认为是成功的。在这种情况下,模块从 filestrF 中读出 3 个 netcdf 文件名

新数据集的新细节现在显示为:

对我来说似乎很好。但是,当我将此数据集写回 netcdf 时,文件大小现在已经爆炸式增长,1 年的数据似乎相当于 700 MB。

  • 对于 2 个串联文件,~1.5 GB
  • 对于 3 ,, ,, 2.2 GB
  • 对于 4 ,, ,, 2.9 GB

我本来期望 3 x 90 MB = 270 MB - 因为我们在一维(时间)上缩放(3x)。变量、dis 和其他维度 lat 和 lon 的大小保持不变。

任何想法请为巨大的高档尺寸?我已经测试了在没有连接的情况下读入和写回文件,并且在没有增加大小的情况下成功地做到了这一点。

0 投票
1 回答
301 浏览

python - python xarray concat groupby在datetime64维度中

我有一个 xarray 数据集,它是:

dis 变量中有 nans,但整个数组不是 nans。维度时间长度对应10年的每日数据(3652天)。

我想要做的是获得 10 年时间序列的每月平均值,每个月和每个网格正方形(纬度,经度)。所以输出数据集将是:

我看到的一个选项几乎可以满足我的要求:

然而,它的输出只是一个 12 项数组。即我们失去了纬度和经度维度。

我认为使用 datetime64 方法可能有一些简单的方法可以做到这一点,但我一直在努力充分理解它们。

唉,在写这篇文章时,我已经做到了:

这使:

但是,是否有另一种更符合使用 groupby 的第一行代码的 Pythonic 方式?

谢谢

0 投票
1 回答
386 浏览

python - 使用 Python xarray 使用“where”进行屏蔽不再起作用

更新后我遇到了麻烦xarray

我有一个盐度数据集,其尺寸为:

对于特定站点,我想获得所选深度的盐度,例如 -10 m。维度层包含随时间变化的深度值,即,给定层包含随时间变化的不同深度值(由于水位变化)。

以前我在做以下事情:

这工作得很好。

但是现在我收到了这个错误:

有人知道这里发生了什么吗?

或者有没有更聪明的方法来分割我的数据集?

我使用的 xarray 版本是:

xarray 0.7.2

系统版本:

编辑:添加的数据集详细信息

0 投票
1 回答
1869 浏览

python - 使用 matplotlib 在一个图形上绘制四个箱线图

所以我有多个数据文件,所有这些文件我都使用数据框来轻松处理信息。所有文件都是 NetCDF 文件。我试图在同一个数字上绘制 4 个箱线图,以便它们都可以很容易地进行比较(我正在研究同一时间选择的平均值如何在不同时间达到峰值)。它们将具有不同的 X 和 Y 值,因为这是在略微不同的时间间隔内获取的观测数据,并且不同的变量数对应于不同的时间相关变量。

我一直在尝试使用子图来使用 matplotlib 实现这一点,但它只是吐出三个空图。我怎样才能做到这一点?

这是代码:

究竟是什么没有发生?

好的,现在,我对其进行了编辑,使其如下所示:

现在,我得到了五个带有五个数字的窗口。占据整个窗口的一个图形具有应该在四个子图中的所有数据,而其他四个图形在我想要的位置各有一个子图,但为空。

0 投票
1 回答
3177 浏览

python - 在 Python 中加载 grib2 文件

我正在尝试加载 grib2 文件,但我不确定这些文件是否是问题所在,或者我尝试加载它们的方式。

这些文件是从这里提取的(我没有从这里下载它们,而是从一个从这里获取它们的同事的文件夹中复制它们 - 所以它们实际上应该是相同的文件......,但我也尝试插入ftp 地址并得到相同的错误)。

我累了pygrib

得到这个错误:

我试过了xarray

我得到这个错误

我直接试了NIO

我得到与来自的错误相同的错误xarray

有什么建议吗?

0 投票
1 回答
1756 浏览

python - 了解 xarray groupby

我正在尝试计算每个组中的成员数量,类似于pandas.DataFrame.groupby.count. 但是,它似乎不起作用。这是一个例子:

但是,我希望这个输出:

这是怎么回事?

换句话说:

0 投票
1 回答
118 浏览

python - Python:计算列表列表中的元素数量并提供给矩阵?

给定一个列表列表,其中每个列表的长度

我想计算一个元素的重复次数并将其输入一个单独的矩阵。

让我们将每个列表称为 a frame,将框架中的元素称为states

这是我的代码,它工作正常:

在我的例子中,列表M28,800 lists,其中每个列表包含 75 个元素(0 到 499 之间的数字)。

这使得矩阵的大小为 500X 28,800。代码需要 30 分钟(大约)才能完成,我相信问题出在for循环中。

有没有什么有效的方法来编写它,以便代码可以更快地执行?

0 投票
1 回答
1669 浏览

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

我有一个数据集,我在其中存储不同类/子类型的副本(不知道该怎么称呼它),然后是每个类/子类型的属性。本质上,有 5 个子类型/类,每个子类型/类有 4 个重复,以及 100 个被测量的属性。

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

在此,我想合并暗淡subtypereplicates所以我有一个 2D 数组(或pd.DataFrame带有attributes vs. subtype/replicates.

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