2017-11-07 3 views
1

Ich versuche, Daten von einem Pandas-Datenrahmen in eine verschachtelte hdf5-Datei mit mehreren Gruppen und Datasets innerhalb jeder Gruppe zu schreiben. Ich möchte es als eine einzelne Datei behalten, die in der Zukunft täglich wachsen wird. Ich habe einen Sprung mit dem folgenden Code habe, die die Struktur von dem, was zeigt Ich mag würdeWie schreibe ich ein Pandas Dataframe in ein HDF5-Dataset

import h5py 
import numpy as np 
import pandas as pd 

file = h5py.File('database.h5','w') 

d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']), 
    'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])} 

df = pd.DataFrame(d) 

groups = ['A','B','C']   

for m in groups: 

    group = file.create_group(m) 
    dataset = ['1','2','3'] 

    for n in dataset: 

     data = df 
     ds = group.create_dataset(m + n, data.shape) 
     print ("Dataset dataspace is", ds.shape) 
     print ("Dataset Numpy datatype is", ds.dtype) 
     print ("Dataset name is", ds.name) 
     print ("Dataset is a member of the group", ds.parent) 
     print ("Dataset was created in the file", ds.file) 

     print ("Writing data...") 
     ds[...] = data   

     print ("Reading data back...") 
     data_read = ds[...] 

     print ("Printing data...") 
     print (data_read) 

file.close(

)

diese Weise wird die verschachtelte Struktur geschaffen zu erreichen, aber es verliert den Index und Spalten. Ich habe die

df.to_hdf('database.h5', ds, table=True, mode='a') 

versucht, aber hat nicht funktioniert, habe ich diesen Fehler

AttributeError: 'Dataset' object has no attribute 'split'

Kann jemand etwas Licht bitte. Vielen Dank

+0

in den die Zukunft heißt Operationen wie riesig werden wird 'pandas' verwendet' pytables' Datenrahmen 'hdf5' Dateien zu schreiben. Es gibt SO Fragen, die diese Dateien mit 'h5py' suchen. Soweit ich mich erinnere, ist das Layout komplex, aber nicht unmöglich zu folgen. 'h5py' ist im Wesentlichen' numpy' iterface to 'hdf5'. – hpaulj

+0

https://StackOverflow.com/Questions/41173254/how-should-i-use-h5py-lib-for-storing-time-series-data – hpaulj

Antwort

1

df.to_hdf() erwartet einen String als key Parameter (zweiter Parameter):

key : string

identifier for the group in the store

dies so versuchen:

df.to_hdf('database.h5', ds.name, table=True, mode='a') 

wo ds.name sollten Sie eine Zeichenfolge (Schlüsselname) zurück:

In [26]: ds.name 
Out[26]: '/A1' 
+0

Die Quelle für diese Aufrufe 'pytables.to_hdf'. – hpaulj

+0

@hpaulj, ja, es nennt 'pandas.io.pytables.to_hdf()', aber ich verstehe nicht, was Sie sagen/zeigen wollten ... – MaxU

+0

@MaxU Ich habe versucht, die ds.name in der Schlüssel funktioniert aber nicht, da es noch Spalten und Indizes verliert und außerdem gibt es nur Nullen – AleVis

0

Ich dachte, mit zu gehen pandas \ pytables und die HDFStore-Klasse statt h5py. Also habe ich versucht die folgenden

import numpy as np 
import pandas as pd 

db = pd.HDFStore('Database.h5') 

index = pd.date_range('1/1/2000', periods=8) 

df = pd.DataFrame(np.random.randn(8, 3), index=index, columns=['Col1', 'Col2', 'Col3']) 

groups = ['A','B','C']  

i = 1  

for m in groups: 

    subgroups = ['d','e','f'] 

    for n in subgroups: 

     db.put(m + '/' + n, df, format = 'table', data_columns = True) 

Es funktioniert, 9 Gruppen (Gruppen anstelle von Datensätzen in pyatbles statt fo h5py?) Erstellt von A/d bis C/f. Spalten und Indizes bleiben erhalten und können die Dataframe-Operationen ausführen, die ich brauche. Noch allerdings fragen, ob es sich um eine effiziente Möglichkeit, Daten aus einer bestimmten Gruppe abzurufen, die

db['A/d'].Col1[4:] 
+0

Hallo dort. Eine Reihe von Leuten in unserer Community sagen manchmal, dass jedes Mal, wenn sie geschlechtsspezifische Annahmen über Software-Ingenieure sehen, sie sich Sorgen darüber machen, dass sich die Leute ausgeschlossen fühlen. Ich frage mich, ob Sie versuchen könnten, männlich-orientierte Grüße und Pronomen in Ihren Beiträgen zu vermeiden, um eine einladendere Umgebung zu schaffen? Vielen Dank. – halfer

Verwandte Themen