読者です 読者をやめる 読者になる 読者になる

サイエンティストとマーケターのはざま

Pythonとか広告とかデータ分析とかとか


datetime型に変換する

前々回入手したヒストリカルデータは日付と時刻のカラムが分かれています。 

In [10]:
 
df=pd.read_csv('hourly2001.txt')
 
 
In [11]:
 
df
 
 
Out[11]:
 <TICKER><DTYYYYMMDD><TIME><OPEN><HIGH><LOW><CLOSE>
0 AUDUSD 20010103 20000 0.5624 0.5636 0.5620 0.5634
1 AUDUSD 20010103 30000 0.5633 0.5643 0.5620 0.5631
2 AUDUSD 20010103 40000 0.5629 0.5642 0.5626 0.5642
3 AUDUSD 20010103 50000 0.5641 0.5652 0.5637 0.5651

 

後々データベースに格納することを考慮して、これを'YYYY-MM-dd HH:mm'のdatetime型にしてみましょう。

 

 このデータの場合、<DTYYYYMMDD>のカラムは日付として問題なく扱えます。

In [8]:
 
pd.to_datetime(df['<DTYYYYMMDD>'] , format='%Y%m%d')
 
 
Out[8]:
0    2001-01-03
1    2001-01-03

しかし、<TIME>のデータはint型で読み込まれてしまったため、<DTYYYYMMDD>と<TIME>をそのまま結合したところでうまく処理されません。

そこでまず、<DTYYYYMMDD>をdatetime型にしてyyyy-mm-ddのフォーマットにします。

In [15]:
 
data['date']=pd.to_datetime(data['<DTYYYYMMDD>'] , format='%Y%m%d')
 

 次にdateと<TIME>のセルを文字列に置き換えてから結合します。

ここでは配列datetimeを用意してスペースを追加しつつそれぞれをappendしました。

dateは先頭の10文字だけを取得するようdate_str[:10]としています。これはdatetime型であるdateをstring型に変換すると、隠れていた時刻の部分が含まれてしまうためです。

In [39]:
 
datetime=[]
for i in range(1476928):
    date_str=str(data['date'][i])
    time_str=str(data['<TIME>'][i])
    datetime.append(date_str[:10] + ' ' + time_str)
 
 
In [42]:
 
datetime[1476927]
 
 
Out[42]:
'2014-08-05 19:00'

 

それらしい形に変換できました。

そもそもデータをreadするときに型をうまく指定してあげておけばもっと楽に処理できたのかなーと思いました。