我从这里的熊猫 DataFrame 文档开始:http: //pandas.pydata.org/pandas- docs/stable/dsintro.html
我想用时间序列计算中的值迭代地填充 DataFrame。所以基本上,我想用列 A、B 和时间戳行来初始化 DataFrame,全为 0 或全为 NaN。
然后我会添加初始值并检查这些数据,从之前的行计算新行,比如说row[A][t] = row[A][t-1]+1左右。
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
这里有几个建议:
用于date_range索引:
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']
注意:我们可以简单地通过编写来创建一个空的 DataFrame(带NaNs):
NaN
df_ = pd.DataFrame(index=index, columns=columns) df_ = df_.fillna(0) # with 0s rather than NaNs
要对数据进行这些类型的计算,请使用 numpy 数组:
data = np.array([np.arange(10)]*3).T
因此我们可以创建 DataFrame:
In [10]: df = pd.DataFrame(data, index=index, columns=columns) In [11]: df Out[11]: A B C 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