0

我是新手 do 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]]]

似乎工作。

4

1 回答 1

0

是的,Dask.dataframe 的.loc访问器只有在获得具体的索引值时才有效。否则它不知道要向哪些分区请求数据。将您的惰性 dask 结果计算为具体的 Pandas 结果是解决此问题的一种明智方法,尤其是当您的索引适合内存时。

于 2017-08-23T12:25:31.407 回答