Python dask数据帧中的复滤波

Python dask数据帧中的复滤波,python,pandas,numpy,dataframe,dask,Python,Pandas,Numpy,Dataframe,Dask,我习惯于对数据帧对象进行“复杂”过滤: import numpy as np import pandas as pd data = pd.DataFrame(np.random.random((10000, 2)) * 512, columns=["x", "y"]) data2 = data[np.sqrt((data.x - 200)**2 + (data.y - 200)**2) < 1] 将numpy导入为np 作为pd进口熊猫 data=pd.DataFrame(np.rand

我习惯于对数据帧对象进行“复杂”过滤:

import numpy as np
import pandas as pd
data = pd.DataFrame(np.random.random((10000, 2)) * 512, columns=["x", "y"])
data2 = data[np.sqrt((data.x - 200)**2 + (data.y - 200)**2) < 1]
将numpy导入为np
作为pd进口熊猫
data=pd.DataFrame(np.random.random((10000,2))*512,列=[“x”,“y”])
数据2=数据[np.sqrt((数据x-200)**2+(数据y-200)**2)<1]
这不会产生任何问题

但对于dask数据帧,我有:

ddata = dask.dataframe.from_pandas(data, 8)
ddata2 = ddata[np.sqrt((ddata.x - 200)**2 + (ddata.y - 200)**2) < 1]
---------------------------------------------------------------------------
NotImplementedError                       Traceback (most recent call last)
<ipython-input-13-c2acf73dddf6> in <module>()
----> 1 ddata2 = ddata[np.sqrt((ddata.x - 200)**2 + (ddata.y - 200)**2) < 1]

~/anaconda3/lib/python3.6/site-packages/dask/dataframe/core.py in __getitem__(self, key)
   2115             return new_dd_object(merge(self.dask, key.dask, dsk), name,
   2116                                  self, self.divisions)
-> 2117         raise NotImplementedError(key)
   2118 
   2119     def __setitem__(self, key, value):

NotImplementedError: 0       False
ddata=dask.dataframe.from_pandas(数据,8)
ddata2=ddata[np.sqrt((ddata.x-200)**2+(ddata.y-200)**2)<1]
---------------------------------------------------------------------------
NotImplementedError回溯(最后一次调用)
在()
---->1 ddata=ddata[np.sqrt((ddata.x-200)**2+(ddata.y-200)**2)<1]
~/anaconda3/lib/python3.6/site-packages/dask/dataframe/core.py in\uuuuu getitem\uuuuuu(self,key)
2115返回新对象(合并(self.dask,key.dask,dsk),名称,
2116自我,自我划分)
->2117升起未执行错误(键)
2118
2119定义设置项(自身、键、值):
未实现错误:0错误
同时,更简单的操作:

ddata2 = ddata[ddata.x < 200]
ddata2=ddata[ddata.x<200]
很好

我认为问题在于,只要我做任何“复杂”的数学(即
np.sqrt
),结果就不再是一个懒惰的dask数据帧


有办法解决这个问题吗?我是否必须创建一个新的列,然后对其进行筛选,或者是否有更好的方法?

如果您将
np.sqrt
替换为
da.sqrt
,则一切正常

import dask.array as da

您可能会注意到dask系列的
np.sqrt
生成一个numpy数组,因此计算中的这一步不是懒惰的,而是强制执行一个具体的结果。使用dask等效函数来保持懒惰,并保持所有dask兼容。

请接受我的道歉,我甚至没有想到在
dask.array
中寻找基本的数学函数,将来我们将能够使
np.sqrt
正常工作。你所做的是明智的。