2017-09-13 1 views
4

J'ai de grands pandas DataFrames avec des données financières. Je n'ai aucun problème à ajouter et à concaténer des colonnes et des DataFrames supplémentaires à mon fichier .h5.Ajouter des données au fichier HDF5 avec Pandas, Python

Les données financières sont mises à jour chaque minute, j'ai besoin d'ajouter une ligne de données à toutes mes tables existantes à l'intérieur de mon fichier .h5 chaque minute.

Voici ce que j'ai essayé jusqu'à présent, mais peu importe ce que je fais, il écrase le fichier .h5 et ne pas simplement ajouter des données.

HDFStore façon:

#we open the hdf5 file 
save_hdf = HDFStore('test.h5') 

ohlcv_candle.to_hdf('test.h5') 

#we give the dataframe a key value 
#format=table so we can append data 
save_hdf.put('name_of_frame',ohlcv_candle, format='table', data_columns=True) 

#we print our dataframe by calling the hdf file with the key 
#just doing this as a test 
print(save_hdf['name_of_frame'])  

L'autre façon que je l'ai essayé, to_hdf:

#format=t so we can append data , mode=r+ to specify the file exists and 
#we want to append to it 
tohlcv_candle.to_hdf('test.h5',key='this_is_a_key', mode='r+', format='t') 

#again just printing to check if it worked 
print(pd.read_hdf('test.h5', key='this_is_a_key')) 

Voici ce que l'un des DataFrames ressemble après avoir été read_hdf:

  time  open  high  low close  volume   PP 
0 1505305260 3137.89 3147.15 3121.17 3146.94 6.205397 3138.420000 
1 1505305320 3146.86 3159.99 3130.00 3159.88 8.935962 3149.956667 
2 1505305380 3159.96 3160.00 3159.37 3159.66 4.524017 3159.676667 
3 1505305440 3159.66 3175.51 3151.08 3175.51 8.717610 3167.366667 
4 1505305500 3175.25 3175.53 3170.44 3175.53 3.187453 3173.833333 

La prochaine fois que j'obtiens des données (toutes les minutes), je voudrais qu'une ligne soit ajoutée à l'index 5 de toutes mes colonnes ... et ensuite 6 et 7 ..et ainsi de suite, sans avoir à lire et à manipuler le fichier entier dans la mémoire que cela serait vaincre le point de faire cela. S'il existe une meilleure façon de résoudre ce problème, n'hésitez pas à le recommander.

P.S. désolé pour le formatage de cette table ici

Répondre

2

pandas.HDFStore.put() a le paramètre append (qui par défaut à False) - qui indique aux Pandas d'écraser au lieu d'ajouter.

Donc, essayez ceci:

store = pd.HDFStore('test.h5') 

store.append('name_of_frame', ohlcv_candle, format='t', data_columns=True) 

nous pouvons également utiliser store.put(..., append=True), mais ce fichier doit également être créé dans un format de table:

store.put('name_of_frame', ohlcv_candle, format='t', append=True, data_columns=True) 
+0

C'est, je vous remercie beaucoup pour le rapide répondre ! – Karl

+0

@Karl, heureux je pourrais aider :) – MaxU

+0

pourriez-vous ajouter une explication pourquoi 'append' fonctionne et' put' ne fonctionne pas? – Mayou36