2014-04-08 5 views
5

Ein Pandas DataFrame kann so in eine hdf5-Datei konvertiert werden;python sqlite db in hdf5 konvertieren

df.to_hdf('test_store.hdf','test',mode='w')

Ich habe eine DB-Datei SQLite, die zu einer hdf5 Datei konvertiert werden muss und dann würde ich die hdf5 Datei über Pandas lesen pd.read_hdf verwenden.

Aber zuerst, wie konvertiere ich eine Python SQLite db in eine hdf5-Datei?

EDIT:

Ich bin mir bewusst, die .read_sql Methode in Pandas zu verwenden. Aber ich möchte zuerst die db in hdf5 konvertieren.

Antwort

4

Das ist überraschend einfach: Verwenden Sie Pandas!

Pandas unterstützt reading data directly from a SQL database in einem DataFrame. Sobald Sie den DataFrame haben, können Sie damit fertig werden.

Kurz Beispiel from the docs genommen:

import sqlite3 
from pandas.io import sql 
# Create your connection. 
cnx = sqlite3.connect('mydbfile.sqlite') 

# read the result of the SQL query into a DataFrame 
data = sql.read_sql("SELECT * FROM data;", cnx) 

# now you can write it into a HDF5 file 
data.to_hdf('test_store.hdf','test',mode='w') 
+0

Ich kenne die '.read_sql 'Methode. Aber ich gehe hier auf Größenprobleme ein und möchte daher zuerst die db in hdf5 umwandeln. – richie

+0

@richie Ich habe den letzten Schritt hinzugefügt, um zu HDF5 zu konvertieren. Ich dachte, das wäre offensichtlich, angesichts deiner Frage. – Carsten

1

Werfen Sie einen Blick auf diesem ---

http://www.tutorialspoint.com/sqlite/sqlite_limit_clause.htm

Die Idee, eine select * from table Abfrage zu wiederholen wäre und begrenzen die Ergebnisse mit einer zunehmenden Offset. Schreiben Sie die Ergebnisse wie oben gezeigt in den hdf5-Datenspeicher. Zählen Sie zuerst die Anzahl der Einträge mit einer select count(*) from table und teilen Sie dann die Iteration in einen Managble-Teil davon auf. Wenn z. B. 4 Millionen Datensätze gelesen werden, werden 200.000 gleichzeitig angezeigt und die Anzahl von 0, 200000, 400000 usw. erhöht.

Ich muss dies zu einer sehr großen SQLite-Datei machen. wird berichten, wenn es funktioniert.