Ich habe einen großen Datenrahmen (> 3MM Reihen), die ich versuche, eine Funktion zu durchlaufen (die unten ist weitgehend vereinfacht), und ich bekomme eine Memory Error
Nachricht.Pandas - Slice Large Dataframe in Chunks
Ich glaube, ich bin vorbei zu groß von einem Datenrahmen in die Funktion, so versuche ich zu:
1) Scheibe des Datenrahmen in kleinere Stücke (vorzugsweise durch AcctName
in Scheiben geschnitten)
2) Übergeben des Datenrahmen in die Funktion
3) Verketten den Datenrahmen zurück in einen großen Datenrahmen
def trans_times_2(df):
df['Double_Transaction'] = df['Transaction'] * 2
large_df
AcctName Timestamp Transaction
ABC 12/1 12.12
ABC 12/2 20.89
ABC 12/3 51.93
DEF 12/2 13.12
DEF 12/8 9.93
DEF 12/9 92.09
GHI 12/1 14.33
GHI 12/6 21.99
GHI 12/12 98.81
Ich weiß, dass meine Funktion ordnungsgemäß funktioniert, da sie auf einem kleineren Datenrahmen (z. 40.000 Zeilen). Ich habe folgendes versucht, aber es ist mir nicht gelungen, die kleinen Datenrahmen wieder in einen großen Datenrahmen zu verketten.
def split_df(df):
new_df = []
AcctNames = df.AcctName.unique()
DataFrameDict = {elem: pd.DataFrame for elem in AcctNames}
key_list = [k for k in DataFrameDict.keys()]
new_df = []
for key in DataFrameDict.keys():
DataFrameDict[key] = df[:][df.AcctNames == key]
trans_times_2(DataFrameDict[key])
rejoined_df = pd.concat(new_df)
Wie stelle ich mich die, die geteilten Datenrahmen:
df1
AcctName Timestamp Transaction Double_Transaction
ABC 12/1 12.12 24.24
ABC 12/2 20.89 41.78
ABC 12/3 51.93 103.86
df2
AcctName Timestamp Transaction Double_Transaction
DEF 12/2 13.12 26.24
DEF 12/8 9.93 19.86
DEF 12/9 92.09 184.18
df3
AcctName Timestamp Transaction Double_Transaction
GHI 12/1 14.33 28.66
GHI 12/6 21.99 43.98
GHI 12/12 98.81 197.62
Dank Scott! Gibt es eine Möglichkeit, sich in kleinere Datenrahmen zu teilen, basierend auf "AcctName" anstatt der Chunk-Größe? –
@WaltReed Probieren Sie diesen zweiten Teil mit groupby aus. –
Okay, großartig, das hat funktioniert! Ich rufe dies in einer Funktion auf, aber wenn ich versuche, den neuen Datenrahmen * nach dem Ausführen der Funktion zu sehen, bekomme ich den Fehler 'NameError: Name 'new_df' ist nicht definiert '. Was fehlt mir hier? –