Speichern von Pandas DataFrames in SQLAlchemy-Modellen

9

Ich erstelle eine Flask-Anwendung, mit der Benutzer CSV-Dateien hochladen (mit verschiedenen Spalten), hochgeladene Dateien anzeigen, zusammenfassende Statistiken erstellen, komplexe Transformationen / Aggregationen durchführen können (manchmal über Sellery-Jobs) und dann die geänderten Daten exportieren. Die hochgeladene Datei wird in einen Pandas DataFrame eingelesen, der es mir ermöglicht, die meisten komplizierten Daten zu verarbeiten.

Ich würde mir wünschen, dass diese Datenrahmen zusammen mit den zugehörigen Metadaten (hochgeladene Zeit, ID des Benutzers, der die Datei hochlädt usw.) bestehen bleiben und für mehrere Benutzer verfügbar sein werden, um verschiedene Ansichten anzuzeigen. Ich bin mir jedoch nicht sicher, wie ich die Daten am besten in meine SQLAlchemy-Modelle integrieren kann (ich verwende PostgreSQL im Backend).

Drei Ansätze, die ich in Betracht gezogen habe:

  • Den Datenrahmen in ein PickleType zerlegen und direkt in der Datenbank speichern. Dies scheint die einfachste Lösung zu sein, bedeutet aber, dass ich große binäre Objekte in die Datenbank stecken werde.
  • Auswählen des Datenrahmens, Schreiben in das Dateisystem und Speichern des Pfads als Zeichenfolge im Modell. Dadurch wird die Datenbank klein gehalten, es wird jedoch beim Sichern der Datenbank und beim Löschen von zuvor hochgeladenen Dateien durch Benutzer etwas Komplexität hinzugefügt.
  • Konvertieren des Datenrahmens in JSON ( DataFrame.to_json() ) und Speichern als json type (wird dem Typ json von PostgreSQL zugeordnet). Dies erhöht den Aufwand für die Analyse von JSON bei jedem Zugriff auf den DataFrame, ermöglicht aber auch die direkte Bearbeitung der Daten über PostgreSQL JSON-Operatoren .

Gibt es angesichts der Vor- und Nachteile von jedem (einschließlich derer, die mir nicht bekannt sind), eine bevorzugte Möglichkeit, Pandas DataFrames in SQLAlchemy-Modelle einzubauen?

    
danpelota 06.05.2014, 00:36
quelle

1 Antwort

4

Gehen Sie zur JSON- und PostgreSQL-Lösung. Ich bin auf einem Pandas-Projekt, das mit dem Pickle-on-File-System begann, und lud die Daten in ein Klassenobjekt für die Datenverarbeitung mit Pandas ein. Als die Daten jedoch groß wurden, haben wir mit SQLAlchemy / SQLite3 gespielt. Jetzt stellen wir fest, dass die Arbeit mit SQLAlchemy / PostgreSQL noch besser ist. Ich denke, unser nächster Schritt wird JSON sein. Habe Spaß! Pandas rockt!

    
zerocog 16.04.2015 22:02
quelle

Tags und Links