Създаване на празна Pandas DataFrame и след това запълването ѝ?
Започвам от документацията на pandas DataFrame тук: http://pandas.pydata.org/pandas-docs/stable/dsintro.html
Бих искал итеративно да запълня DataFrame със стойности при изчисление от типа на времеви серии. Така че основно бих искал да инициализирам DataFrame с колони A, B и редове с времеви маркери, всички 0 или всички NaN.
След това бих добавил начални стойности и бих преминал през тези данни, изчислявайки новия ред от предишния ред, да речем row[A][t] = row[A][t-1]+1
или така.
В момента използвам кода по-долу, но ми се струва, че той е доста грозен и трябва да има начин да се направи това директно с DataFrame или просто по-добър начин като цяло. Забележка: Използвам 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
Ето няколко предложения:
Използвайте
date_range
за индекса:Забележка: бихме могли да създадем празна DataFrame (с
NaN
s), като просто напишем:За да направите този тип изчисления за данните, използвайте масив numpy:
Следователно можем да създадем DataFrame:
I Ако искате просто да създадете празна рамка от данни и да я запълните с някои входящи рамки от данни по-късно, опитайте това:
В този пример използвам this pandas doc, за да създам нова рамка от данни, и след това използвам append, за да запиша в новата рамка от данни с данни от старата рамка от данни.
Погледнете това
I Ако искате да въведете имената на колоните от самото начало, използвайте този подход:
Ако искате да добавите запис към рамката с данни, по-добре е да използвате следния начин:
Също така може да искате да подадете речник:
Ако искате да добавите друга рамка от данни към my_df, направете следното:
I Ако добавяте редове в цикъл, помислете за проблеми с производителността:
За първите около 1000 записа "my_df.loc" производителността е по-добра, но постепенно става по-бавна с увеличаване на броя на записите в цикъла.
Ако възнамерявате да правите тънки операции в голям цикъл (например 10 млн. записа или повече):
По-добре е да използвате комбинация от тези две опции; запълване на рамка от данни с iloc, докато размерът ѝ стане около 1000, след което я добавете към оригиналната рамка от данни и изпразнете временната рамка от данни. Това ще повиши производителността ви около 10 пъти.