2017-08-18 26 views
0

我是新做dask(導入爲dd)並嘗試轉換一些熊貓(導入爲pd)代碼。dask(來自熊貓)列的子選擇通過計算布爾指數

以下幾行的目標是將數據切片到這些列,這些列的值將在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結果計算爲具體的Pandas結果是解決這個問題的一個明智的解決方案,特別是如果您的索引適合內存。