子集按列位置dask数据帧

时间:2017-05-24 19:31:56

标签: python pandas dask

一旦我有了一个dask数据帧,我怎样才能有选择地将列拉入内存中的pandas DataFrame?假设我有一个N x M数据帧。如何创建N×m数据帧,其中m <&lt; M并且是任意的。

from sklearn.datasets import load_iris
import dask.dataframe as dd

d = load_iris()
df = pd.DataFrame(d.data)
ddf = dd.from_pandas(df, chunksize=100)

我想做什么:

in_memory = ddf.iloc[:,2:4].compute()

我能做的事情:

ddf.map_partitions(lambda x: x.iloc[:,2:4]).compute()

map_partitions可以正常工作,但对于一个非常大的文件来说速度相当慢。我希望我遗漏一些非常明显的东西。

1 个答案:

答案 0 :(得分:6)

虽然没有为dask-dataframes实现iloc,但您可以轻松地实现索引,如下所示:

# b.py
def dowork():
    from a import MAPPINGS
    for key,value in MAPPINGS.iteritems():
        print key

这有额外的好处,dask立即知道所选列的类型,并且不需要做额外的工作。对于cols = list(ddf.columns[2:4]) ddf[cols].compute() 变体,dask至少需要检查数据类型产生,因为您调用的函数完全是任意的。