2017-08-18 1 views
0

Je suis nouveau faire dask (importé comme dd) et essayer de convertir certains pandas (importés en tant que pd) code.sous-sélection de colonnes dans dask (de pandas) par indexeur booléen calculé

L'objectif des lignes suivantes est de découper les données dans ces colonnes, dont les valeurs remplissent l'exigence calculée dans dask.

Il existe une table donnée dans csv. L'ancien code lit

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() 

et fonctionne bien. Mon idée simple pour la conversion était si remplacer la première ligne à

inputdata=dd.read_csv("inputfile.csv"); 

mais qui a entraîné le message d'erreur étrange IndexError: too many indices for array. Même en basculant vers les données calculées en inputdata et pseudob, l'erreur persiste.
La question est peut-être spécifiquement associée à l'idée de découpage booléen calculé pour les colonnes dask.

Je viens de trouver un moyen (peut-être sous-optimal) (pas une solution) de le faire. Modification de la ligne 4 à la suivante

inputdata=inputdata.loc[:,inputdata.columns[(pseudob.values>0).compute()[0]]] 

semble fonctionner.

Répondre

0

Oui, l'accesseur .loc de Dask.dataframe ne fonctionne que s'il obtient des valeurs d'indexation concrètes. Sinon, il ne sait pas quelles partitions demander les données. Calculer votre résultat paresseux à un résultat concret Pandas est une solution judicieuse à ce problème, surtout si vos index s'inscrivent dans la mémoire.