Ich arbeite mit einem Code in Pandas, die das Lesen einer Vielzahl von Dateien und dann Ausführen verschiedener Operationen für jede Datei innerhalb einer Schleife (die über eine Dateiliste iteriert).Konvertieren Python Dask-Serie zu Liste oder Dask DataFrame innerhalb für Schleife
Ich versuche, dies zu einem Dask-basierten Ansatz anstelle eines Pandas-basierten Ansatz zu konvertieren und habe bisher den folgenden Versuch - ich bin neu zu Dask und muss fragen, ob dies ein vernünftiger Ansatz ist.
Hier ist, was die Eingabedaten wie folgt aussieht:
A X1 X2 X3 A_d S_d
0 1.0 0.475220 0.839753 0.872468 1 1
1 2.0 0.318410 0.940817 0.526758 2 2
2 3.0 0.053959 0.056407 0.169253 3 3
3 4.0 0.900777 0.307995 0.689259 4 4
4 5.0 0.670465 0.939116 0.037865 5 5
Hier ist der Code:
import dask.dataframe as dd
import numpy as np; import pandas as pd
def my_func(df,r): # perform representative calculations
q = df.columns.tolist()
df2 = df.loc[:,q[1:]]/df.loc[:,q()[1:]].sum()
df2['A'] = df['A']
df2 = df2[ (df2['A'] >= r[0]) & (df2['A'] <= r[1]) ]
c = q[1:-2]
A = df2.loc[:,c].sum()
tx = df2.loc[:,c].min() * df2.loc[:,c].max()
return A - tx
list_1 = []
for j in range(1,13):
df = dd.read_csv('Test_file.csv')
N = my_func(df,[751.7,790.4]) # perform calculations
out = ['X'+str(j)+'_2', df['A'].min()] + N.compute().tolist()
list_1.append(out)
df_f = pd.DataFrame(list_1)
my_func
gibt eine Dask Serie N
. Momentan muss ich die Diesk-Serie .compute()
vor mir in eine Liste umwandeln. Ich habe Schwierigkeiten, das zu überwinden.
- Ist es möglich,
N
(was ist eine Dask-Serie) als Zeile zu einem leeren Dask DF vertikal anhängen? z.B. in Pandas tendiere ich dazu, dies zu tun:df_N = pd.DataFrame()
würde außerhalb derfor
Schleife gehen und dann so etwas wiedf_N = pd.concat([df_N,N],axis=0)
. Dies würde ermöglichen, dass ein DASK DF in derfor
Schleife aufgebaut wird. Danach (außerhalb der Schleife), konnte ich einfach einfach die gebaute Dask DF zupd.DataFrame(list_1)
horizontal verketten. - Ein anderer Ansatz besteht darin, eine einzelne Reihe Dask DF aus der Dask Serie
N
zu erstellen. Dann verketten Sie diesen einreihigen DF vertikal mit einem leeren Dask-DF (der außerhalb der Schleife erstellt wurde). Ist es in Dask möglich, einzeiligen Dask DataFrame aus einer Serie zu erstellen?
Weitere Informationen (falls erforderlich):
- In meinem realen Code, ich lese aus einer
*.csv
Datei in einer Schleife. Aus diesem Grund habe ich, als ich ein Beispiel-Dastaset generierte, es in eine*.csv
-Datei geschrieben, umdd.read_csv()
innerhalb der Schleife zu verwenden. df2s['A'] = df['A']
- Diese Zeile wird benötigt, da die Zeile darüber die SpalteA
auslässt (während einer Normalisierung jeder Spalte auf ihre Summe) und einen neuen DataFrame erzeugt.df2s['A'] = df['A']
fügt SpalteA
zurück zum neuen DataFrame hinzu.
Ich vermute, dass Sie schneller eine bessere Antwort erhalten, wenn Sie Ihr Problem auf kleinere Beispiele reduzieren können. Vielleicht möchten Sie https://stackoverflow.com/help/mcve lesen – MRocklin
Okay, wie geht das? Ich habe mit Pandas zusammenhängendes Material entfernt und den restlichen auf Dask basierenden Code gekürzt, um es auf ein Minimum zu beschränken. –
Und irgendwelche Gedanken darüber, wie man mit der Serie 'N' umgeht? –