2017-12-13 12 views
0

私は軸(私の場合はsample_ID)に沿って2つのデータセットをマージしています。しかし、データベースのdtypeは、dtypeint64の場合でも、int64からfloat64に変換されるようです。以下のように第二のデータベース(new)が見えますpython-xarray:マージ時にdtypesを変更する

<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 

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 

ある

<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が)のように見えますタイプはすべてfloat64に変換されています。整数型を維持する効率的な方法はありますか?

答えて

0

xarray.merge(...)は、二段階プロセスでデータセットを組み合わせ:

  1. これは、それらの座標を整列させるためにデータセットにxarray.align(..., join='outer')を呼び出します。これはNaNを導入するので、int64 - > float64を宣伝する必要があります。
  2. 各配列位置のアライメントされたデータセットから単一でないNaN値としてマージされたデータセットを作成します。

この方法では、引数がまだ整列されていないときにNaNを導入するのは避けられません。

データセットに参加するより良い方法は、xarray.concat(..., dim='sample_ID')です。これは、連結ディメンション(この場合は'sample_ID')に沿って整列するための何らかの工夫を試みません。つまり、はるかに高速で整数dtypeを保持します。

関連する問題