2017-08-18 1 views
0

私はdask(ddとしてインポート)し、いくつかのパンダ(pdとしてインポートされた)コードを変換しようとしています。dask(列挙型のpandasから)の列の副選択を計算ブール値インデクサ

次の行の目的は、データをこれらの列にスライスすることです。この値は、daskで計算された要件を満たした値です。

csvには特定のテーブルがあります。前者のコードは、

inputdata=pd.read_csv("inputfile.csv"); 
pseudoa=inputdata.quantile([.035,.965]) 
pseudob=pseudoa.diff().loc[.965] 
inputdata=inputdata.loc[:,inputdata.columns[pseudob.values>0]] 
inputdata.describe() 

となり、正常に動作しています。 変換のための私のシンプルなアイデアはとても

inputdata=dd.read_csv("inputfile.csv"); 

に最初の行を置き換えましたが、それは奇妙なエラーメッセージIndexError: too many indices for arrayになりました。 inputdatapseudobのレディ・コンピューティング・データに切り替えても、エラーが残ります。
質問は、特に、dask-columnsの計算されたブールスライシングの考え方に割り当てられています。

私はちょうどそれを行う(解決策ではない)方法(おそらく最適以下)を発見しました。 4行目を次のように変更する

inputdata=inputdata.loc[:,inputdata.columns[(pseudob.values>0).compute()[0]]] 

と思われます。

答えて

0

はい、Dask.dataframeの.locアクセサは、具体的なインデックス値を取得する場合にのみ機能します。それ以外の場合、データを要求するパーティションはわかりません。具体的なパンダの結果にあなたの怠け者のdaskの結果を計算することは、特にあなたの指標がメモリに収まる場合、この問題の一つの賢明な解決策です。

関連する問題