首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >索引到Dask系列可以返回Dask系列

索引到Dask系列可以返回Dask系列
EN

Stack Overflow用户
提问于 2020-02-03 10:21:25
回答 2查看 109关注 0票数 1

我有Dask系列的Dask数据帧。

我想在本系列中建立索引,以获取dask数据帧以供后续工作使用。

但是,使用loc[0]会导致另一个dask系列。使用to_frame也不起作用,因为结果是"Dask系列Dask数据帧的Dask数据帧“。

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

代码语言:javascript
复制
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序列保留,直到返回“单例”pandas序列的compute

有没有办法让dask按照我期望的类型来处理索引对象?

EN

回答 2

Stack Overflow用户

发布于 2020-02-16 06:42:45

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

当我们拥有唯一值的索引时,这与我们的直觉背道而驰,这可能会导致您似乎遇到的那种挫败感。

票数 2
EN

Stack Overflow用户

发布于 2020-02-04 20:52:37

您可能有将数据帧保存在一个系列中的原因,但我猜将原始数据帧作为分区保留在dask中会更好。然后,您可以使用concat加入它们,如下例所示:

代码语言:javascript
复制
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]})

ddf1 = dd.from_pandas(pdf1, npartitions=1)
ddf2 = dd.from_pandas(pdf2, npartitions=1)

ddf = dd.concat([ddf1, ddf2], axis=0)
ddf.compute()

您可以使用ddf.partitions[0].compute()访问第一个分区

更重要的是,如果您对原始数据帧进行了索引,并且对索引进行了排序,并且索引不重叠,则concat将正确设置连接的数据帧的划分,而无需重新索引。您可以使用ddf.divisions检查分区,它将在本例中显示(None, None, None),但如果您从正确的索引开始,则可以正确地显示分区。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60032403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档