Creare un DataFrame Pandas vuoto e poi riempirlo?
Parto dalla documentazione di pandas DataFrame qui: http://pandas.pydata.org/pandas-docs/stable/dsintro.html
Vorrei riempire iterativamente il DataFrame con valori in un calcolo di tipo serie temporale. Quindi, fondamentalmente, vorrei inizializzare il DataFrame con le colonne A, B e le righe di timestamp, tutte 0 o tutte NaN.
Aggiungerei poi dei valori iniziali e passerei su questi dati calcolando la nuova riga dalla riga precedente, diciamo row[A][t] = row[A][t-1]+1
o così.
Attualmente sto usando il codice qui sotto, ma sento che è un po' brutto e ci deve essere un modo per farlo direttamente con un DataFrame, o semplicemente un modo migliore in generale. Nota: sto usando 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
375
3
Ecco un paio di suggerimenti:
Usate
date_range
per l'indice:Nota: potremmo creare un DataFrame vuoto (con
NaN
s) semplicemente scrivendo:Per fare questo tipo di calcoli per i dati, usate un array numpy:
Quindi possiamo creare il DataFrame:
Se volete semplicemente creare un frame di dati vuoto e riempirlo successivamente con alcuni frame di dati in arrivo, provate questo:
In questo esempio sto usando questo documento pandas per creare un nuovo frame di dati e poi uso append per scrivere nel newDF con i dati del oldDF.
Dai un'occhiata a questo
Se volete avere i vostri nomi di colonna al loro posto fin dall'inizio, usate questo approccio:
Se vuoi aggiungere un record al dataframe sarebbe meglio usare:
Potresti anche voler passare un dizionario:
Tuttavia, se vuoi aggiungere un altro dataframe a my_df fai come segue:
Se state aggiungendo righe all'interno di un ciclo considerate i problemi di performance:
Per circa i primi 1000 record "my_df.loc" le prestazioni sono migliori, ma diventano gradualmente più lente aumentando il numero di record nel ciclo.
Se avete intenzione di fare diete all'interno di un grande ciclo (diciamo 10M di record o giù di lì):
È meglio usare un misto di questi due; riempire un dataframe con iloc fino a quando la dimensione non diventa circa 1000, poi aggiungerlo al dataframe originale e svuotare il dataframe temporaneo. Questo aumenterebbe le tue prestazioni di circa 10 volte.