私は Pandas を探索しています - それを学び、適用しようとしています。現在、次の構造の財務時系列データが入力された csv ファイルがあります。
date, time, open, high, low, close, volume
2003.04.08,12:00,1.06830,1.06960,1.06670,1.06690,446
2003.04.08,13:00,1.06700,1.06810,1.06570,1.06630,433
2003.04.08,14:00,1.06650,1.06810,1.06510,1.06670,473
2003.04.08,15:00,1.06670,1.06890,1.06630,1.06850,556
2003.04.08,16:00,1.06840,1.07050,1.06610,1.06680,615
ここで、csv データを pandas DataFrame オブジェクトに変換して、日付と時刻のフィールドがマージされ、次のように DataFrame の DateTimeIndex になるようにします。
df = pa.read_csv(path,
names = ['date', 'time', 'open', 'high', 'low', 'close', 'vol'],
parse_dates = {'dateTime': ['date', 'time']},
index_col = 'dateTime')
これはうまく機能し、素敵な DataFrame オブジェクトを生成します。
<class 'pandas.core.frame.DataFrame'>
Index: 8676 entries, 2003.04.08 12:00 to nan nan
Data columns (total 5 columns):
open 8675 non-null values
high 8675 non-null values
low 8675 non-null values
close 8675 non-null values
vol 8675 non-null values
dtypes: float64(5)
しかし調べてみると、Index は DataTimeIndex ではなく、Unicode 文字列であることがわかりました。
type(df.index)
>>> pandas.core.index.Index
df.index
>>> Index([u'2003.04.08 12:00', u'2003.04.08 13:00', u'2003.04.08 14:00', ....
そのread_csv
ため、日付と時刻のフィールドを解析してマージしましたが、DateTimeIndex は作成しませんでした。私がドキュメントから理解している限りでは、datetime オブジェクトのリストとともに提供される新しいデータ構造オブジェクトは、DateTimeIndex を自動的に作成する必要があります。私が間違っている?DataFrame オブジェクトは例外ですか?
また、現在のインデックスを次のように変換しようとしました。
df.index = pa.to_datetime(df.index)
ただし、インデックスは変更されておらず、まだ Unicode 形式のままです。デフォルトの解析関数が機能していないのではないかと疑い始めましたが、エラー メッセージは表示されません。
この状況でDateFrameで機能するDateTimeIndexを取得するにはどうすればよいですか?
解決:
df = pa.read_csv(path,
names = ['date', 'time', 'open', 'high', 'low', 'close', 'vol'],
parse_dates={'datetime':['date','time']},
keep_date_col = True,
index_col='datetime'
)
ラムダ関数を適用して、パーサーが行うべきことを行います。
df['datetime'] = df.apply(lambda row: datetime.datetime.strptime(row['date']+ ':' + row['time'], '%Y.%m.%d:%H:%M'), axis=1)