我新做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
。
即使切换到inputdata
和pseudob
中的就绪计算数据,错误仍然存在
也许问题是专门分配给dask-columns的计算布尔切片的想法。
我刚刚发现(可能是次优的)方式(不是解决方案)来做到这一点。将第4行更改为以下
inputdata=inputdata.loc[:,inputdata.columns[(pseudob.values>0).compute()[0]]]
似乎有效。
答案 0 :(得分:0)
是的,Dask.dataframe的.loc
访问器只有在获得具体的索引值时才有效。否则,它不知道要求数据的分区。将懒惰的dask结果计算为具体的Pandas结果是解决此问题的一个明智的解决方案,特别是如果您的索引适合内存。