【问题标题】:Assign list as Dask-Dataframe column将列表分配为 Dask-Dataframe 列
【发布时间】:2021-08-16 01:49:43
【问题描述】:

我有一个 dask-dataframe 并使用一些列来处理 pandas date_range 进程,它会创建如下列表:

list=[[2005/01/01,2005/01/02,2005/01/03],[2005/05/01,2005/05/02],[2005/06/01,2005/06/02,2005/06/03]]

之后我想像 pandas 一样将列表分配给列:

dd['time']=list

然而它返回错误

'列分配不支持类型列表'

那么有什么解决办法吗?

最后一列应该是这样的

time
[2005/01/01,2005/01/02,2005/01/03]
[2005/05/01,2005/05/02]
[2005/06/01,2005/06/02,2005/06/03]

【问题讨论】:

    标签: python-3.x dask dask-dataframe


    【解决方案1】:

    list 分配给 Dask 数据帧并非易事

    Dask 数据帧被分成多个分区。这些分区可能具有不同的长度,直到您实际 compute 数据帧时才知道这些长度。

    因此,您不能简单地分配列表:您不知道如何在分区之间分配列表。

    如何分配list

    了解上述内容后,我们就知道了拼图中缺少的部分:分区长度。这是一个可重现的示例:

    import dask
    import dask.array as da
    
    # Sample data
    df = dask.datasets.timeseries()
    mylist = list(range(len(df)))
    
    # Work out the lengths of each partition
    chunks = df.map_partitions(lambda x: len(x)).compute().to_numpy()
    
    # Build a Dask array with the same partition sizes
    myarray = da.from_array(mylist, chunks=tuple(chunks))
    
    # Now you can assign!
    df['test'] = myarray
    

    该怎么做

    虽然上述方法可行,但它需要compute 整个数据帧。这通常是个坏主意,因为您只想计算一些较小的最终结果。

    很有可能您可以重写代码,以便计算结果(生成带有日期的列表的结果)产生例如Dask 系列,因此很懒惰。

    您可以尝试用更多细节重新表述您的问题(或者问另一个问题,因为这已经是一个合理的独立问题),可能使用 dask.datasets.timeseries() 作为可重复的示例。

    【讨论】:

      猜你喜欢
      • 2017-10-01
      • 1970-01-01
      • 2020-02-13
      • 1970-01-01
      • 2022-01-03
      • 1970-01-01
      • 2018-05-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多