2017-05-05 81 views
3

,我有以下DASK數據幀在Python垂直串聯:的Python DASK - 2個DataFrames

  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 DataFrames:

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 DataFrame的方法嗎?

回答

4

如果您檢查數據幀ddf.divisions的分區,假設有一個分區,它會找到索引的邊:(0,4)。這對dask非常有用,因爲它知道何時對數據進行一些操作,而不是使用不包含所需索引值的分區。這也是爲什麼當索引適合這項工作時,一些dask操作要快得多。

連接時,第二個數據幀與第一個數據幀具有相同的索引。如果索引的值在兩個分區中具有不同的範圍,則連接可以在沒有交織的情況下工作。

+0

可否請您提供一些示例,以便如何將pd.dataframes的dask.series連接成一個dask數據框,而不通過所有內存並與熊貓連接? – thebeancounter

+0

@mdurant - 我有類似的問題。我不確定什麼是正確的,爲什麼要處理這種情況。也許可以使用'concat'問題,然後運行'reset_index()',然後執行'drop_duplicate()'。不知怎的,它接近我是一個尷尬的解決方案。我只需要能夠連接不在索引內的行。我試過[這個解決方案](https://stackoverflow.com/questions/27097492/identify-records-not-in-another-dataframe),但它對'dask.dataframe'無效。我也嘗試過使用'append'方法,但沒有成功 –