【问题标题】:Indexing into a Dask Series gives back the Dask Series将 Dask 系列编入索引可归还 Dask 系列
【发布时间】:2020-02-03 02:21:24
【问题描述】:

我有一系列 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 系列,直到 compute 返回一个“单例”pandas 系列。

无论如何要告诉 dask 将索引对象视为我期望的类型吗?

【问题讨论】:

    标签: python pandas dask


    【解决方案1】:

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

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

    【讨论】:

    • 那么这个atm没有解决办法吗?我发现处理这些情况的唯一方法是转换为延迟并直接处理,然后转换回所需的任何内容。
    • 解决方案是我们总是返回一个系列。从 Dask 的角度来看,这不是错误,而是 Pandas 方面的奇怪类型不一致。
    【解决方案2】:

    您可能有一个理由将您的数据帧保持在一个系列中,而我从示例中无法理解,但我的猜测是,将原始数据帧作为分区保存会更好。然后您可以使用concat 加入他们,如下例所示:

    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),但如果您从正确的索引开始,则正确除法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-18
      • 1970-01-01
      • 2017-10-01
      • 2019-01-16
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多