你如何从 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.
数组操作似乎是我一直在寻找的缺失部分。
我有一个 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.
数组操作似乎是我一直在寻找的缺失部分。