通过计算布尔索引器对 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
。
即使在 inputdata
和 pseudob
中切换到现成的计算数据,错误仍然存在。
也许这个问题专门针对 dask-columns 的计算布尔切片的想法。
我刚刚找到了一种(可能不是最佳的)方法(不是解决方案)来做到这一点。将第 4 行更改为以下内容
inputdata=inputdata.loc[:,inputdata.columns[(pseudob.values>0).compute()[0]]]
似乎有效。
是的,Dask.dataframe 的 .loc
访问器只有在获取具体索引值时才有效。否则它不知道向哪个分区请求数据。将懒惰的 dask 结果计算为具体的 Pandas 结果是解决此问题的一种明智方法,尤其是当您的索引适合内存时。
我是新来的 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
。
即使在 inputdata
和 pseudob
中切换到现成的计算数据,错误仍然存在。
也许这个问题专门针对 dask-columns 的计算布尔切片的想法。
我刚刚找到了一种(可能不是最佳的)方法(不是解决方案)来做到这一点。将第 4 行更改为以下内容
inputdata=inputdata.loc[:,inputdata.columns[(pseudob.values>0).compute()[0]]]
似乎有效。
是的,Dask.dataframe 的 .loc
访问器只有在获取具体索引值时才有效。否则它不知道向哪个分区请求数据。将懒惰的 dask 结果计算为具体的 Pandas 结果是解决此问题的一种明智方法,尤其是当您的索引适合内存时。