创build一个空的pandas数据框,然后填充它?
我从pandas数据框文档开始: http : //pandas.pydata.org/pandas-docs/stable/dsintro.html
我想用时间序列types的计算迭代地填充dataframe。 所以基本上,我想初始化,数据框与列A,B和时间戳记行,全部为0或全部NaN。
然后,我会添加初始值,并从这一行计算新的行之前,行[A] [T] =行[A] [T-1] +1左右。
我目前使用的代码如下,但我觉得这是一种丑陋的,必须有一种方式,直接与数据框或一般更好的方式做到这一点。 注意:我正在使用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
这里有几点build议:
使用date_range
作为索引:
import datetime import pandas as pd import numpy as np todays_date = datetime.datetime.now().date() index = pd.date_range(todays_date-datetime.timedelta(10), periods=10, freq='D') columns = ['A','B', 'C']
注意:我们可以简单地通过编写来创build一个空的DataFrame(使用NaN
)
df_ = pd.DataFrame(index=index, columns=columns) df_ = df_.fillna(0) # with 0s rather than NaNs
要为数据执行这些types的计算,请使用numpy数组:
data = np.array([np.arange(10)]*3).T
因此我们可以创buildDataFrame:
In [10]: df = pd.DataFrame(data, index=index, columns=columns) In [11]: df Out[11]: ABC 2012-11-29 0 0 0 2012-11-30 1 1 1 2012-12-01 2 2 2 2012-12-02 3 3 3 2012-12-03 4 4 4 2012-12-04 5 5 5 2012-12-05 6 6 6 2012-12-06 7 7 7 2012-12-07 8 8 8 2012-12-08 9 9 9
如果您只是想创build一个空的数据框,稍后用一些传入的数据框填充它,请尝试以下操作:
在这个例子中,我使用这个pandas文档来创build一个新的数据框,然后使用append来使用oldDF中的数据写入newDF。
看看这个
newDF = pd.DataFrame() #creates a new dataframe that's empty newDF = newDF.append(oldDF, ignore_index = True) # ignoring index is optional # try printing some data from newDF print newDF.head() #again optional
- 如果我不得不从一个以上的oldDF中将新的数据添加到这个newDF中,我只需要使用一个for循环遍历pandas.DataFrame.append()