我想从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]
不过还是比大熊猫的画框慢很多。