2017-05-05 4 views
3

Ich habe folgendes Dask Datenrahmen in Python:Python Dask - vertikale Verkettung von 2 Datenrahmen

  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 

Ich versuche, 2 Dask Datenrahmen zu verketten vertikal:

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

aber ich bekomme diese Fehlermeldung:

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 

Allerdings, wenn ich versuche:

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

dann scheint es zu funktionieren. Gibt es ein Problem bei der Einstellung True (in Bezug auf Leistung - Geschwindigkeit)? Oder gibt es eine andere Möglichkeit, Diek DataFrames vertikal zu verketten?

Antwort

4

Wenn Sie die Unterteilungen des Datenrahmens ddf.divisions untersuchen, finden Sie unter der Annahme einer Partition, dass dort die Kanten des Index liegen: (0, 4). Dies ist nützlich für dasask, da es weiß, wenn Sie eine Operation für die Daten ausführen, und keine Partition zu verwenden, die die erforderlichen Indexwerte nicht enthält. Dies ist auch der Grund, warum manche DASC-Operationen viel schneller sind, wenn der Index für den Job geeignet ist.

Wenn Sie verketten, hat der zweite Datenrahmen den gleichen Index wie der erste. Die Verkettung würde ohne Verschachtelung funktionieren, wenn die Werte des Index unterschiedliche Bereiche in den zwei Partitionen hätten.

+0

Könnten Sie bitte ein Beispiel dafür geben, wie man eine DASK.series von pd.dataframes zu einem DASK-Datenrahmen verkettet, ohne alle über den Speicher zu übergeben und mit Pandas zu verketten? – thebeancounter

+0

@mdurant - Ich habe ein ähnliches Problem. Ich bin nicht sicher, was ist der richtige Grund, um diese Situation zu bewältigen. vielleicht um das 'concat'-Problem zu benutzen und dann den' reset_index() 'gefolgt von' drop_duplicate() 'auszuführen. Irgendwie scheint es mir eine peinliche Lösung zu sein. Ich muss nur in der Lage sein, die Zeilen, die nicht im Index enthalten sind, zu erfassen. Ich habe versucht [diese Lösung] (https://stackoverflow.com/questions/27097492/identify-records-not-in-another-dataframe), aber es ist nicht gültig für 'dask.dataframe'. Ich habe auch versucht, die Append-Methode ohne Erfolg zu verwenden –