2
私はパンダのデータフレームのオブジェクトの「複合体」のフィルタリングを行うために使用しています:複雑なフィルタリングが
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]
は、これは何の問題も発生しません。
しかし、私が持っている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
シンプルな操作:
ddata2 = ddata[ddata.x < 200]
正常に動作します
。
「複雑な」数式(つまりnp.sqrt
)を実行すると、結果はもはやレイジーdask DataFrameではないという問題があると思います。
方法はありますか?フィルターをかけることができる新しい列を作成する必要がありますか、それとももっと良い方法がありますか?
私は、dask.arrayの基本的な数学関数を探すとは思っていませんでした。 –
将来、 'np.sqrt'を動作させることができます。あなたがしたことは分かりやすいものでした。 – MRocklin