【问题标题】:python-xarray: Changing dtypes when mergingpython-xarray:合并时更改数据类型
【发布时间】:2017-12-14 06:05:38
【问题描述】:

我正在沿一个轴合并两个数据集(在我的例子中,sample_ID)。然而,似乎数据库的dtypeint64 转换为float64,即使变量dtype 对于第一个和第二个数据库都是int64。我的第一个数据库 (existing) 看起来像:

<xarray.Dataset>
Dimensions:          (sample_ID: 3)
Coordinates:
  * sample_ID  (sample_ID) int64 0 1 2
Data variables:
    a                (sample_ID) float64 1.0 2.0 1.1
    b                (sample_ID) float64 5.0 6.0 5.1
    varsUpdate       (sample_ID) int64 0 0 1
    y                (sample_ID) float64 100.0 200.0 100.1
    x                (sample_ID) float64 10.0 20.0 10.1
    trajID           (sample_ID) int64 1 2 1

第二个数据库(new)看起来像:

<xarray.Dataset>
Dimensions:          (sample_ID: 1)
Coordinates:
  * sample_ID  (sample_ID) int64 3
Data variables:
    a                (sample_ID) float64 2.1
    b                (sample_ID) float64 6.1
    varsUpdate       (sample_ID) int64 1
    y                (sample_ID) float64 200.1
    x                (sample_ID) float64 20.1
    trajID           (sample_ID) int64 2

调用existing.merge(new,inplace=True)后的最终结果是

<xarray.Dataset>
Dimensions:          (sample_ID: 4)
Coordinates:
  * sample_ID  (sample_ID) int64 0 1 2 3
Data variables:
    a                (sample_ID) float64 1.0 2.0 1.1 2.1
    b                (sample_ID) float64 5.0 6.0 5.1 6.1
    varsUpdate       (sample_ID) float64 0.0 0.0 1.0 1.0
    y                (sample_ID) float64 100.0 200.0 100.1 200.1
    x                (sample_ID) float64 10.0 20.0 10.1 20.1
    trajID           (sample_ID) float64 1.0 2.0 1.0 2.0

可以看到类型已经全部转换为float64。有没有一种有效的方法来维护整数类型?

【问题讨论】:

    标签: python-xarray


    【解决方案1】:

    xarray.merge(...) 在两个阶段过程中组合数据集:

    1. 它在数据集上调用xarray.align(..., join='outer') 以对齐它们的坐标。这引入了 NaN,所以我们需要提升 int64 -> float64。
    2. 它创建合并的数据集,作为来自每个数组位置的对齐数据集的单个非 NaN 值。

    由于它的工作方式,在参数尚未对齐时引入 NaN 几乎是不可避免的。

    加入数据集的更好方法是xarray.concat(..., dim='sample_ID')。这并没有尝试对沿串联维度(在本例中为'sample_ID')对齐做任何聪明的事情,这意味着它更快并且保留整数数据类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-26
      • 2017-04-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 2012-07-19
      相关资源
      最近更新 更多