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
正常工作。你所做的是明智的。