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
Große Tabelle (in Jupyter modifiziert & in Variable gespeichert) ohne MemoryError extrahieren
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)
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
Für alle meine Code Beispiele gilt: "There is always a better way."
https://projecteuler.net/profile/Brotherluii.png
@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.
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.
@monkiiiii,
das hängt im Detail wohl von deinen Daten ab.
Ein simples Beispiel würde so gehen:
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")
@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.
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.