首页 > 解决方案 > 将 Dask 系列编入索引可归还 Dask 系列

问题描述

我有一个 Dask 系列的 Dask 数据框。

我想索引到这个系列以获取 dask 数据帧以供后续工作。

然而loc[0],在另一个 dask 系列中使用结果。使用to_frame也不起作用,因为结果是“Dask 系列 Dask 数据帧的 Dask 数据帧”。

这是一个使用 Dask 系列 Pandas 数据帧的最小示例(不完全相同,但说明了问题):

import pandas as pd
import dask.dataframe as dd

pdf1 = pd.DataFrame({'a': [1,2,3,4], 'b': [4,3,2,1]})
pdf2 = pd.DataFrame({'a': [4,3,2,1], 'b': [1,2,3,4]})

ps = pd.Series([pdf1, pdf2])
ds = dd.from_pandas(ps, npartitions=1)

print(type(ds.loc[0])) # still dask series
print(type(ds.loc[1])) # still dask series

print(ds.compute().loc[0]) # this is a pandas dataframe
print(ds.loc[0].compute()) # this is a pandas series
print(ds.loc[0].compute().loc[0]) # need to index into the singleton series to get back the dataframe

似乎一旦对象变成了一个 dask 系列,所有后续的组合器都将它保持为一个 dask 系列 until compute,它返回一个“单例”熊猫系列。

反正有没有告诉 dask 将索引对象视为我期望的类型?

标签: pythonpandasdask

解决方案


我怀疑这样做的原因是 Dask 不知道只有一个值为 0 的索引值。原则上可能有很多行的索引值为 0,因此一般的输出类型.loc是一系列。

当我们有独特的价值指数时,这违背了我们的直觉,这可能会导致你似乎遇到过的那种挫败感。


推荐阅读