是否可以附加到 xarray.Dataset?
Is it possible to append to an xarray.Dataset?
我一直在使用 .append()
方法连接 pandas 中的两个表(具有相同的字段)。不幸的是 xarray
中没有这种方法,还有其他方法吗?
您可以使用 .concat
或 merge()
。 Documentation.
Xarray 没有 append 方法,因为它的数据结构建立在 NumPy 的不可调整大小的数组之上,所以我们不能在不复制整个数组的情况下附加新元素。因此,我们没有实现 append
方法。相反,您应该使用 xarray.concat
.
一种常见的模式是在列表中累积 Dataset/DataArray 个对象,并在最后连接一次:
datasets = []
for example in examples:
ds = create_an_xarray_dataset(example)
datasets.append(ds)
combined = xarray.concat(datasets, dim='example')
您不想在循环内进行串联——这会使您的代码 运行 变成二次方时间。
或者,您可以为结果分配一个 Dataset/DataArray,并且
fill in the values with indexing,例如,
dims = ('example', 'x', 'y')
combined = xarray.Dataset(
data_vars={'my_variable': (dims, np.zeros((len(examples), 100, 200)))},
coords={'example': examples})
for example in examples:
combined.loc[dict(example=example)] = create_an_xarray_dataset(example)
(请注意,您始终需要使用带方括号的索引,例如 []
或 .loc[]
—— 使用 sel()
和 isel()
分配不起作用。)
这两种方法同样有效 - 哪种方法对您来说更好看或更适合您的应用程序,这真的是一个品味问题。
就其价值而言,pandas 具有相同的限制:append
方法确实在每次使用时复制整个数据帧。对于新用户来说,这是一个永恒的惊喜和性能问题的根源。所以我确实认为我们做出了正确的设计决定,没有将它包含在 xarray 中。
我一直在使用 .append()
方法连接 pandas 中的两个表(具有相同的字段)。不幸的是 xarray
中没有这种方法,还有其他方法吗?
您可以使用 .concat
或 merge()
。 Documentation.
Xarray 没有 append 方法,因为它的数据结构建立在 NumPy 的不可调整大小的数组之上,所以我们不能在不复制整个数组的情况下附加新元素。因此,我们没有实现 append
方法。相反,您应该使用 xarray.concat
.
一种常见的模式是在列表中累积 Dataset/DataArray 个对象,并在最后连接一次:
datasets = []
for example in examples:
ds = create_an_xarray_dataset(example)
datasets.append(ds)
combined = xarray.concat(datasets, dim='example')
您不想在循环内进行串联——这会使您的代码 运行 变成二次方时间。
或者,您可以为结果分配一个 Dataset/DataArray,并且 fill in the values with indexing,例如,
dims = ('example', 'x', 'y')
combined = xarray.Dataset(
data_vars={'my_variable': (dims, np.zeros((len(examples), 100, 200)))},
coords={'example': examples})
for example in examples:
combined.loc[dict(example=example)] = create_an_xarray_dataset(example)
(请注意,您始终需要使用带方括号的索引,例如 []
或 .loc[]
—— 使用 sel()
和 isel()
分配不起作用。)
这两种方法同样有效 - 哪种方法对您来说更好看或更适合您的应用程序,这真的是一个品味问题。
就其价值而言,pandas 具有相同的限制:append
方法确实在每次使用时复制整个数据帧。对于新用户来说,这是一个永恒的惊喜和性能问题的根源。所以我确实认为我们做出了正确的设计决定,没有将它包含在 xarray 中。