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