2016-12-14 10 views
2
import dask.dataframe as dd 
import numpy as np 
from dask import delayed 

df1 = pd.DataFrame({'a': np.arange(10), 'b': np.random.rand()}) 
df1 = df1.astype({'a':np.float64}) 
df2 = pd.DataFrame({'a': np.random.rand(5), 'c': 1}) 
df1.to_csv('df1.csv') 
df2.to_csv('df2.csv') 
dd.read_csv('*.csv').compute() 

はインナー与える複数のCSVファイルから読み込む結合結果参加:DASK:外側は

Unnamed: 0   a   b 
0   0 0.000000 0.218319 
1   1 1.000000 0.218319 
2   2 2.000000 0.218319 
... 

そして:

  a   b c 
0 0.000000 0.218319 NaN 
1 1.000000 0.218319 NaN 
2 2.000000 0.218319 NaN 
... 

方法:

df1_delayed = delayed(lambda: df1)() 
df2_delayed = delayed(lambda: df2)() 
dd.from_delayed([df1_delayed, df2_delayed]).compute() 

は、外部結合の結果を与えますがread_csvを同じモードで動作させますか?

EDIT:でもパンダまでDTYPEスキーマを渡し

は動作しません:

dd.read_csv('*.csv', dtype={'a':np.float64, 'b': np.float64, 'c': np.float64}).compute() 

答えて

2

を一般dask.dataframeがdask.dataframeを形成するすべてのパンダのデータフレームは、同じ列を持っていることを前提としていとdtype。これが当てはまらない場合、行動は不自然である。

CSVの列とdtypeが異なる場合は、2番目の例のようにdask.delayedを使用して、新しい空の列を明示的に追加してからdask.dataframe.from_delayedを呼び出すことをおすすめします。