你如何从dask数据帧/系列中删除infs?

时间:2017-09-12 14:48:20

标签: dask

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

好的,我刚刚发现我可以做到以下几点:

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

一般来说,看起来只是使用da.数组操作是我一直在寻找的缺失部分。