一旦我有了一个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
可以正常工作,但对于一个非常大的文件来说速度相当慢。我希望我遗漏一些非常明显的东西。
答案 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至少需要检查数据类型产生,因为您调用的函数完全是任意的。