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

subselection of columns in dask (from pandas) by computed boolean indexer

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

以下几行的目标是将数据切片到那些列中,这些列的值满足 dask 中的计算要求。

csv 中有给定的 table。以前的代码显示为

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]]]

似乎有效。

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