Je pars de la documentation de pandas DataFrame ici : http://pandas.pydata.org/pandas-docs/stable/dsintro.html
J'aimerais remplir itérativement le DataFrame avec des valeurs dans une sorte de calcul de série chronologique. En gros, j'aimerais initialiser le DataFrame avec les colonnes A, B et les lignes de timestamp, toutes à 0 ou toutes à NaN.
J'ajouterais ensuite des valeurs initiales et je passerais sur ces données en calculant la nouvelle ligne à partir de la ligne précédente, par exemple row[A][t] = row[A][t-1]+1
ou à peu près.
J'utilise actuellement le code ci-dessous, mais je pense que c'est un peu laid et qu'il doit y avoir un moyen de faire cela avec un DataFrame directement, ou juste une meilleure façon en général. Note : J'utilise Python 2.7.
import datetime as dt
import pandas as pd
import scipy as s
if __name__ == '__main__':
base = dt.datetime.today().date()
dates = [ base - dt.timedelta(days=x) for x in range(0,10) ]
dates.sort()
valdict = {}
symbols = ['A','B', 'C']
for symb in symbols:
valdict[symb] = pd.Series( s.zeros( len(dates)), dates )
for thedate in dates:
if thedate > dates[0]:
for symb in valdict:
valdict[symb][thedate] = 1+valdict[symb][thedate - dt.timedelta(days=1)]
print valdict
73 votes
Ne faites jamais croître un DataFrame ! Il est toujours plus économique d'ajouter une liste en python et de la convertir en DataFrame à la fin, tant en termes de mémoire que de performances.
1 votes
@cs95 Qu'est-ce qui est fonctionnellement différent entre
.append
dans pd et en ajoutant une liste ? Je sais.append
dans pandas, on copie l'ensemble des données dans un nouvel objet ', est-ce que python append fonctionne différemment ?4 votes
@Lamma veuillez trouver les détails dans ma réponse ci-dessous. Lors de l'ajout à df, un nouveau DataFrame est créé à chaque fois en mémoire au lieu d'utiliser celui existant, ce qui est franchement un gaspillage.