2017-09-12 58 views
1

我有一個dask系列,我需要刪除infs和nans。 .dropna()只能使用nans。在numpy/pandas中,我會做類似result = result[np.isfinite(result)]。在dask-land中建議的等效物是什麼?用布爾數組索引dask對象會導致錯誤。有沒有辦法告訴dask inf-inf應該被視爲空值,例如?如何從dask數據框/系列中刪除infs?

回答

0

您應該避免使用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 
0

OK,我才發現,原來我可以做到以下幾點:

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

一般來說,它看起來像只用da.數組操作是缺少的部分,我一直在尋找。

相關問題