我正在尝试使用groupby
过滤Dask数据框。
df = df.set_index('ngram');
sizes = df.groupby('ngram').size();
df = df[sizes > 15];
但是,df.head(15)
会引发错误ValueError: Not all divisions are known, can't align partitions. Please use `set_index` to set the index.
。 sizes
上的分歧未知:
>>> df.known_divisions
True
>>> sizes.known_divisions
False
解决方法是执行sizes.compute()
或.to_csv(...)
,然后使用dd.from_pandas
或dd.read_csv
将其读回Dask。然后sizes.known_divisions
将返回True
。这是一个值得注意的不便。
如何才能解决这个问题?我使用Dask错了吗?
注意:有一个未答复的公告here。
答案 0 :(得分:0)
在您使用的常见情况下,似乎您的索引系列实际上 小于您要应用它的源数据帧。在这种情况下,实现它并使用如下的简单索引是有意义的:
df = pd.DataFrame({'ngram': np.random.choice([1, 2, 3], size=1000),
'other': np.random.randn(1000)}) # fake data
d = dd.from_pandas(df, npartitions=3)
sizes = d.groupby('ngram').size().compute()
d = d.set_index('ngram') # also sorts the divisions
ngrams = sizes[sizes > 300].index.tolist() # a list of good ngrams
d.loc[ngrams].compute()