从Dask数据帧列创建列表的方法



我想从Dask Dataframe列创建一个列表/集合。基本上,我想使用这个列表来过滤另一个数据帧中的行,方法是将值与该数据帧中一列相匹配。我尝试过使用list(df[column])set(df[column]),但这需要很多时间,并且最终在创建集群时出错,或者有时在达到内存限制时重新启动内核。

我可以使用dask.bag或多处理器来创建列表吗?

当您尝试使用常规list/set将列转换为列表或集合时,Python会将其加载到内存中,这就是为什么您会遇到内存限制问题。

我相信使用dask.bag可以解决这个问题,因为dask.bag会延迟加载数据,尽管我不确定是否不必首先读取df[column]。此外,要注意,将该列变成一个袋子需要一段时间,这取决于数据的大小

使用dask.bag可以运行映射、筛选和聚合,因此它似乎是解决问题的好方法。

你可以试着运行这个,看看它是否像你期望的那样过滤列表/包。

import dask.bag as db
bag = db.from_sequence(df[column], npartitions=5) 
bag.filter(lamdba list_element: list_element == "filtered row")

由于这只是一个示例,您需要更改npartitions和lambda表达式以满足您的需要。

让我知道这是否有助于

今天偶然发现了这个问题,并用一个简单的列表理解解决了它:

column = [c for c in df.column]

不过还是比大熊猫的画框慢很多。

最新更新