我一直在使用.append()
方法在pandas中连接两个表(具有相同的字段)。不幸的是xarray
中不存在这种方法,还有另一种方法吗?
答案 0 :(得分:7)
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')
您不希望在循环内部连接 - 这将使您的代码以二次方运行。
或者,您可以为结果分配单个数据集/ 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中。
答案 1 :(得分:1)
您可以使用.concat
或merge()
。 Documentation