2017-08-18 1 views
0

Ich bin neu tun dask (als dd importiert) und versuchen, einige Pandas (als pd importiert) Code zu konvertieren.Subselection von Spalten in dask (von Pandas) von berechneten booleschen Indexer

Das Ziel der folgenden Zeilen besteht darin, die Daten in diese Spalten zu zerlegen, deren Werte die berechnete Anforderung in dask erfüllen.

Es gibt eine gegebene Tabelle in CSV. Der frühere Code lautet

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

und funktioniert gut. Meine einfache Idee zur Umwandlung Ersatz wurde so die erste Zeile zu

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

aber das führte zu der seltsamen Fehlermeldung IndexError: too many indices for array. Selbst wenn Sie in inputdata und pseudob auf vorbereitete Daten umschalten, bleibt der Fehler bestehen.
Vielleicht ist die Frage speziell auf die Idee des berechneten Booleschen Slicing für DASK-Spalten zugeordnet.

Ich habe gerade einen (vielleicht suboptimalen) Weg (keine Lösung) gefunden, um das zu tun. Die Zeile 4 wird folgendermaßen geändert:

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

scheint zu funktionieren.

Antwort

0

Ja, der Accessor .loc von Dask.dataframe funktioniert nur, wenn er konkrete Indizierungswerte erhält. Andernfalls weiß es nicht, welche Partitionen nach den Daten gefragt werden. Die Berechnung Ihres faulen Das-Ergebnisses zu einem konkreten Pandas-Ergebnis ist eine vernünftige Lösung für dieses Problem, besonders wenn Ihre Indizes in den Speicher passen.

Verwandte Themen