通过计算的布尔索引器对dask(来自pandas)中的列进行子选择

时间:2017-08-18 09:39:29

标签: python slice dask dask-distributed

我新做dask(导入为dd)并尝试转换一些pandas(导入为pd)代码。

以下几行的目标是将数据切片到那些列,其值满足了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]]]

似乎有效。

1 个答案:

答案 0 :(得分:0)

是的,Dask.dataframe的.loc访问器只有在获得具体的索引值时才有效。否则,它不知道要求数据的分区。将懒惰的dask结果计算为具体的Pandas结果是解决此问题的一个明智的解决方案,特别是如果您的索引适合内存。