你如何从 dask dataframe/series 中删除 infs?

How do you drop infs from dask dataframe/series?

我有一个 dask 系列,我需要从中删除 infs 和 nans。 .dropna() 只删除 nans。在 numpy/pandas 中,我会做类似 result = result[np.isfinite(result)] 的事情。在 dask-land 中推荐的等价物是什么?使用布尔数组索引 dask 对象会出错。例如,有什么方法可以告诉 dask inf-inf 应该被视为空值?

您应该避免使用 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

好的,我刚刚发现我可以执行以下操作:

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

总的来说,使用 da. 数组操作似乎是我一直在寻找的缺失部分。