Как вы сбрасываете инфу из dask dataframe / series?

У меня есть серия dask, из которой надо скинуть и infs, и nans. .dropna() роняет только нанс. В numpy / pandas я бы сделал что-то вроде result = result[np.isfinite(result)]. Какой рекомендуемый эквивалент в даскленде? Индексирование объекта dask с помощью логического массива дает ошибку. Есть ли способ сообщить dask, что inf или -inf следует считать, например, нулевыми значениями?


person Tim Morton    schedule 12.09.2017    source источник


Ответы (2)


Вам следует избегать использования функций NumPy. Это вызовет вычисление, и будущие операции dask.dataframe не решатся использовать эти результаты.

Вместо этого используйте эквивалентную функцию dask.array. Вот минимальный пример.

In [1]: import numpy as np
   ...: import pandas as pd
   ...: import dask.dataframe as dd
   ...: import dask.array as da
   ...: df = pd.DataFrame({'x': [0, 1, 2], 'y': [0, np.inf, 5]})
   ...: df
   ...: 
Out[1]: 
   x         y
0  0  0.000000
1  1       inf
2  2  5.000000

In [2]: ddf = dd.from_pandas(df, npartitions=2)
   ...: ddf[~da.isinf(ddf.y)].compute()
   ...: 
Out[2]: 
   x    y
0  0  0.0
2  2  5.0
person MRocklin    schedule 12.09.2017

Хорошо, я только что обнаружил, что могу делать следующее:

import dask.array as da
result = result[da.isfinite(result)]

В общем, похоже, что просто использование da. операций с массивами - это то, что я искал.

person Tim Morton    schedule 12.09.2017