J'ai une dataframe de 2 Go qui est une écriture une fois, lire beaucoup df. Je voudrais utiliser le df dans les pandas, donc j'utilisais df.read_hdf
et df.to_hdf
dans un format fixe qui fonctionne très bien en lecture et en écriture.Lecture rapide des colonnes spécifiées en df en utilisant pandas.to_hdf
Cependant, le df est en train de croître avec l'ajout de colonnes, donc je voudrais utiliser le format de la table à la place, donc je peux sélectionner les colonnes dont j'ai besoin pour lire les données. Je pensais que cela me donnerait un avantage de vitesse, mais de tester cela ne semble pas être le cas.
Cet exemple:
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.randn(10000000,9),columns=list('ABCDEFGHI'))
%time df.to_hdf("temp.h5", "temp", format ="fixed", mode="w")
%time df.to_hdf("temp2.h5", "temp2", format="table", mode="w")
montre format fixe est légèrement plus rapide (6.8s vs 5,9 secondes sur ma machine).
lire ensuite les données (après une petite pause pour faire le fichier que a été entièrement enregistrée):
%time x = pd.read_hdf("temp.h5", "temp")
%time y = pd.read_hdf("temp2.h5", "temp2")
%time z = pd.read_hdf("temp2.h5", "temp2", columns=list("ABC"))
Rendement:
Wall time: 420 ms (fixed)
Wall time: 557 ms (format)
Wall time: 671 ms (format, specified columns)
Je comprends le format fixe est plus rapide en lire les données, mais pourquoi la df est-elle avec des colonnes spécifiées plus lent que de lire l'intégralité des données? Quel est l'avantage d'utiliser la mise en forme de la table (avec ou sans colonnes spécifiées) sur un formatage fixe?
Y a-t-il un avantage de mémoire quand le df devient encore plus grand?
Merci. Pourriez-vous élaborer sur la façon de sauvegarder les données transposées? Cela signifie-t-il que je devrais enregistrer des colonnes avec des clés séparées, mais dans le même fichier hdf? Pourriez-vous peut-être donner un exemple? – user6538642
@ user6538642, quel est votre "habituel" env. DF forme? – MaxU
shape = (6mln * 50), nombre de colonnes augmentant jusqu'à quelques centaines. L'index est un multi-index (date (au format datetime) et nom) – user6538642