Criar um Pandas DataFrame vazio, e depois enchê-lo?
I'estou a partir dos documentos DataFrame dos pandas aqui: http://pandas.pydata.org/pandas-docs/stable/dsintro.html
I'gostaria de preencher iterativamente o DataFrame com valores em um tipo de cálculo de séries temporais. Então basicamente, I'gostaria de inicializar o DataFrame com as colunas A, B e linhas de timestamp, todas 0 ou todas as NaN.
I'd então adicione os valores iniciais e repasse esses dados calculando a nova linha da linha antes, diga row[A][t] = row[A][t-1]+1
ou assim.
I'estou atualmente usando o código como abaixo, mas eu sinto-o's meio feio e deve haver uma maneira de fazer isso com um DataFrame diretamente, ou apenas uma maneira melhor em geral. Nota: I'm usando o 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
Aqui's um par de sugestões:
Utilize
date_range
para o índice:Note: poderíamos criar um DataFrame vazio (com
NaN
s) simplesmente escrevendo:Para fazer estes tipos de cálculos para os dados, use uma matriz numérica:
Assim, podemos criar o DataFrame:
Se você quiser simplesmente criar um quadro de dados vazio e preenchê-lo com alguns quadros de dados recebidos mais tarde, tente isto:
Neste exemplo estou usando este documento pandas para criar um novo quadro de dados e depois usando anexar para escrever no novoDF com dados do antigoDF.
**Dêem uma olhadela nisto...
Se você quiser ter os nomes das suas colunas desde o início, use esta abordagem:
Se você quiser adicionar um registro ao dataframe, seria melhor usar:
Também pode querer passar um dicionário:
No entanto, se você quiser adicionar outro dataframe ao my_df faça o seguinte:
Se você estiver adicionando linhas dentro de um loop, considere problemas de desempenho:
Para cerca de 1000 registos "my_df.loc" o desempenho é melhor, mas torna-se gradualmente mais lento ao aumentar o número de registos no loop.
Se você planeja fazer coisas dentro de um grande loop (digamos 10M records or so so):
Você está melhor usando uma mistura destes dois; preencha um dataframe com iloc até o tamanho chegar a cerca de 1000, depois junte-o ao dataframe original e esvazie o dataframe temporário. Isto aumentaria o seu desempenho em cerca de 10 vezes.