Seite 1 von 1
Große Tabelle (in Jupyter modifiziert & in Variable gespeichert) ohne MemoryError extrahieren
Verfasst: Freitag 22. Oktober 2021, 12:40
von monkiiiii
Hallo Leute,
ich habe eine große Tabelle. Diese hab ich in Jupyter modifiziert und in einer Variable gespeichert. Jetzt möchte ich die modifizierte Version der Tabelle wieder in einer neuen .txt Datei speichern, da die Funktion, für die ich die Datei benötige im call einen path verlangt.
Zunächst dauert das extrem lange und zeigt mir dann irgendwann einen MemoryError an.
from tabulate import tabulate
with open('sub28.txt', 'w') as f:
f.write(tabulate(df))
#too large I guess --> MemoryError
Zuvor lasse ich zum Verhindern des MemoryErrors bereits das laufen:
import gc
gc.collect()
was mir zuvor schon mal bei dem Problem geholfen hat.
Habt ihr eine Idee?
Vielen Dank im Voraus und liebste Grüße,
monkiiiii
Re: Große Tabelle (in Jupyter modifiziert & in Variable gespeichert) ohne MemoryError extrahieren
Verfasst: Freitag 22. Oktober 2021, 12:46
von ThomasL
Probier mal:
Code: Alles auswählen
with open('sub28.txt', 'w') as file:
df_as string = df.to_string(header=False, index=False)
file.write(df_as_string)
Re: Große Tabelle (in Jupyter modifiziert & in Variable gespeichert) ohne MemoryError extrahieren
Verfasst: Freitag 22. Oktober 2021, 13:39
von monkiiiii
Das gibt mir nach langem Laden wieder einen MemoryError
Re: Große Tabelle (in Jupyter modifiziert & in Variable gespeichert) ohne MemoryError extrahieren
Verfasst: Freitag 22. Oktober 2021, 14:00
von rogerb
@monkiiiii,
ich vermute, dass "tabulate" durch Hinzufügen zusätzlicher Zeichen den Speicher aufbläht. Das könnte auch bei df.to_string() passieren...?
Vielleicht hilf es, das DataFrame zeilenweise in die Datei zu schreiben. Das dürfte auch sehr lange dauern, sollte aber den Speicher nicht überlasten.
Re: Große Tabelle (in Jupyter modifiziert & in Variable gespeichert) ohne MemoryError extrahieren
Verfasst: Freitag 22. Oktober 2021, 14:06
von monkiiiii
Alles klar, wie schreibe ich das denn zeilenweise ein?
Danke auf jeden Fall schon mal.
Re: Große Tabelle (in Jupyter modifiziert & in Variable gespeichert) ohne MemoryError extrahieren
Verfasst: Freitag 22. Oktober 2021, 16:46
von rogerb
@monkiiiii,
das hängt im Detail wohl von deinen Daten ab.
Ein simples Beispiel würde so gehen:
Code: Alles auswählen
import pandas as pd
df = pd.DataFrame(
{
"Num": [4234, 234, 334, 424, 5243],
"Name": ["Anton", "Berta", "Charly", "Donald", "Emil"],
"Ratio": [0.002, 0.42, 0.333, 0.212, 0.555],
}
)
with open("data.txt", "w", encoding="utf-8") as output_file:
for index, data in df.iterrows():
num, name, ratio = tuple(data.to_list())
output_file.write(f"{num:>5d} |{name:>10} |{ratio:>10.3f}\n")
Re: Große Tabelle (in Jupyter modifiziert & in Variable gespeichert) ohne MemoryError extrahieren
Verfasst: Freitag 22. Oktober 2021, 19:32
von narpfel
@monkiiiii: Benutzt du ein 32-Bit-Python? Dann ist der Prozess auf 4 GB limitiert, egal wie viel RAM der Computer tatsächlich hat. Falls du also genug RAM hast, könnte auch ein 64-Bit-Python helfen, ohne dass du das Programm an sich ändern musst.
Und welches Format brauchst du? Bzw. hast du da Kontrolle drüber? `pd.DataFrame.to_csv` zum Beispiel sollte die Daten nicht mehrfach im Speicher halten müssen.