1. ホーム
  2. python

[解決済み] 空のPandas DataFrameを作成し、それを埋める?

2022-03-14 11:28:48

質問

pandasのDataFrameのドキュメントから始めています。 http://pandas.pydata.org/pandas-docs/stable/dsintro.html

時系列的な計算でDataFrameに繰り返し値を入れたいのですが、どうすればいいですか? 基本的には、A列、B列、タイムスタンプ行でDataFrameを初期化したいのですが、すべて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

解決方法は?

以下は、いくつかの提案です。

使用方法 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 を作成することもできます ( 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