Dask:从多个csv文件读取外连接

时间:2016-12-14 15:06:28

标签: dask

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()

提供内部联接结果:

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

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

提供外部联接结果:

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

如何让read_csv在同一模式下工作?

修改

即使将dtype架构传递给pandas也不起作用:

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

1 个答案:

答案 0 :(得分:2)

通常dask.dataframe假定构成dask.dataframe的所有Pandas数据帧具有相同的列和dtype。如果不是这种情况,则行为不明确。

如果您的CSV具有不同的列和dtypes,那么我建议您在第二个示例中使用dask.delayed,并在调用dask.dataframe.from_delayed之前显式添加新的空列。