2017-05-05 24 views
3

の垂直連結:PythonのDASK - 私はPythonで、次のDASKデータフレームを持つ2つのデータフレーム

  A   B  C  D  E  F 
0   1   4  8  1  3  5 
1   6   6  2  2  0  0 
2   9   4  5  0  6  35 
3   0   1  7  10  9  4 
4   0   7  2  6  1  2 

私は縦2つのDASKのデータフレームを連結しようとしています:

ddf_i = ddf + 11.5 
dd.concat([ddf,ddf_i],axis=0) 

をしかし、私はこのエラーを取得します:しかし

Traceback (most recent call last): 
     ... 
     File "...", line 572, in concat 
     raise ValueError('All inputs have known divisions which cannot ' 
    ValueError: All inputs have known divisions which cannot be concatenated in order. Specify interleave_partitions=True to ignore order 

は、私がしようとした場合:

dd.concat([ddf,ddf_i],axis=0,interleave_partitions=True) 

それが動作しているようです。これをTrue(パフォーマンススピードに関して)に設定することに問題がありますか?または、Dask DataFramesを垂直方向に連結する別の方法がありますか?

答えて

4

データフレームddf.divisionsのディビジョンを調べると、1つのパーティションを想定して、そこにインデックスのエッジがあることがわかります(0,4)。これは、必要なインデックス値を含まないパーティションを使用するのではなく、データに対して何らかの操作を行う時を知っているので、daskに便利です。これは、索引がジョブに適切である場合、いくつかのdask操作が非常に高速になる理由です。

連結すると、2番目のデータフレームは最初のデータフレームと同じインデックスを持ちます。索引の値に2つのパーティションの範囲が異なる場合、連結はインターリーブなしで機能します。

+0

pd.dataframesのdask.seriesを1つのdaskデータフレームに連結し、メモリ経由でpandasと連結しないで連結する方法の例を教えてください。 – thebeancounter

+0

@mdurant - 私も同様の問題があります。私はこのような状況を管理する正しい理由が何であるか分かりません。多分 'concat'問題を使用し、' reset_index() 'の後に' drop_duplicate() 'を実行してください。どういうわけかそれは私に厄介な解決策であることを縫う。インデックス内にない行を連結する必要があります。私は[この解決策](https://stackoverflow.com/questions/27097492/identify-records-not-in-another-dataframe)を試しましたが、 'dask.dataframe'には有効ではありません。私はまた、成功せずに 'append'メソッドを使ってみました –

関連する問題