2017-12-13 10 views
0

두 축 (두 경우는 sample_ID)을 따라 데이터 세트를 병합합니다. 그러나 데이터베이스의 경우 dtypeint64에서 이 int64 인 경우에도 첫 번째 및 두 번째 데이터베이스 모두에서 float64으로 변환됩니다. 당신이python-xarray : 병합 할 때 dtypes 변경

<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.merge(new,inplace=True)을 호출 한 후 최종 결과는 다음과 같습니다

<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)은 다음과 같습니다처럼 내 첫 번째 데이터베이스 (existing)이 보인다 형식은 모두 float64으로 변환되었습니다. 정수형을 유지하는 효율적인 방법이 있습니까?

답변

0

xarray.merge(...)는 2 단계 과정에서 데이터 세트를 결합 :

  1. 그것은 그들의 좌표를 정렬 할 데이터 세트에 xarray.align(..., join='outer')를 호출합니다. 이것은 NaN을 도입하므로 int64 -> float64를 홍보해야합니다.
  2. 각 배열 위치에서 정렬 된 데이터 세트의 단일 NaN 이외 값으로 병합 된 데이터 집합을 만듭니다.

작동 방식 때문에 인수가 이미 정렬되지 않은 경우 NaN을 도입하는 것은 거의 피할 수없는 일입니다.

데이터 세트에 참여하는 더 좋은 방법은 xarray.concat(..., dim='sample_ID')입니다. 이것은 연결된 차원 (이 경우 'sample_ID')을 따라 정렬하는 데 영리한 작업을 시도하지 않으므로 훨씬 빠르며 정수 dtypes를 유지합니다.