python - 如何使用 `xarray.DataArray` 索引器更新 `.sel()`?

标签 python database numpy dataframe python-xarray

我发现可视化创建 N 维 DataArray 的最简单方法是创建一个 np.ndarray 然后填充值通过我创建的坐标。当我尝试实际操作时,我不知道如何更新 xr.DataArray

如何更新使用我创建的标签初始化的 xr.DataArray我的实际数据是一个复杂得多的数据集,但这总结了我正在尝试做什么。我可以使用 .loc 但有时我的 ndarrays 会变得庞大而复杂,我真的不知道 dims 的顺序。

# Construct DataArray
DA = xr.DataArray(np.ndarray((3,3,5)), dims=["axis_A","axis_B","axis_C"], coords={"axis_A":["A_%d"%_ for _ in range(3)],
                                                                                  "axis_B":["B_%d"%_ for _ in range(3)],
                                                                                 "axis_C":["C_%d"%_ for _ in range(5)]})
# <xarray.DataArray (axis_A: 3, axis_B: 3, axis_C: 5)>
# array([[[ 0.,  0.,  0.,  0.,  0.],
#         [ 0.,  0.,  0.,  0.,  0.],
#         [ 0.,  0.,  0.,  0.,  0.]],

#        [[ 0.,  0.,  0.,  0.,  0.],
#         [ 0.,  0.,  0.,  0.,  0.],
#         [ 0.,  0.,  0.,  0.,  0.]],

#        [[ 0.,  0.,  0.,  0.,  0.],
#         [ 0.,  0.,  0.,  0.,  0.],
#         [ 0.,  0.,  0.,  0.,  0.]]])
# Coordinates:
#   * axis_B   (axis_B) <U3 'B_0' 'B_1' 'B_2'
#   * axis_A   (axis_A) <U3 'A_0' 'A_1' 'A_2'
#   * axis_C   (axis_C) <U3 'C_0' 'C_1' 'C_2' 'C_3' 'C_4'

# # Update? 
DA.sel(axis_A="A_1", axis_B="B_1", axis_C="C_1").values = 1
DA.max()
# # <xarray.DataArray ()>
# # array(0.0)

DA.sel(axis_A="A_1", axis_B="B_1", axis_C="C_1") = 1
# #  File "<ipython-input-17-8feb7332633f>", line 4
# #     DA.sel(axis_A="A_1", axis_B="B_1", axis_C="C_1") = 1
# #                                                         ^
# # SyntaxError: can't assign to function call

最佳答案

这真的很尴尬,因为 Python 语法的不幸限制是方括号内不支持关键字参数。

因此,您需要将 .sel 的参数作为字典放入 .loc 中:

DA.loc[dict(axis_A="A_1", axis_B="B_1", axis_C="C_1")] = 1

关于python - 如何使用 `xarray.DataArray` 索引器更新 `.sel()`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40029618/

相关文章:

python - 如何在 Pydev Eclipse 编辑器边距中标记 pylint 警告?

python - Collat​​z 猜想回文

mysql - 在MySQL中是否可以使用SQL语句在指定时间查询数据库?

sql - [表] 中只有 1 行时使用 ' where id IN [table] ' 会影响性能吗?

Python根据频率填充缺失值

python - 使用 Pandas 查找分组行的最小值

python - Azure 表存储 - 使用 next_row_key 返回相同的 block

python - while 循环打印 1 到 10 之间的随机数并在数字为 N 时停止

mysql - 用Mysql当前日期函数更新相应字段

python - 如何获取多个峰值下的面积值