Как решить ошибку «не все подразделения известны»? - PullRequest
0 голосов
/ 01 мая 2018

Я пытаюсь отфильтровать кадр данных Dask с groupby.

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(...) и затем прочитать его обратно в Dask с помощью dd.from_pandas или dd.read_csv. Тогда sizes.known_divisions вернет True. Это заметное неудобство.

Как еще это можно решить? Я неправильно использую Dask?

Примечание: здесь есть дубликат без ответа .

1 Ответ

0 голосов
/ 03 мая 2018

В обычном случае, который вы используете, похоже, что ваша индексная серия на самом деле намного меньше, чем исходный фрейм данных, к которому вы хотите применить его. В этом случае имеет смысл материализовать его и использовать простую индексацию, например:

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()
...