データ分析を行う時、常にいい感じのデータを入手できるわけではない。
地道な前処理が必要である。
状況
今回の状況は以下の通り。
- 株価のような時系列データを扱いたい
- インデックスに日付を設定したい
- 入手したデータに格納されている日時はtimestamp形式
サンプルデータ
今回利用するサンプルデータはこちら。
Timestamp,number
1325317920,0
1325317980,1
1325318040,2
1325318100,3
1325318160,4
結論
ポイントは
to_datetime()
を利用してtimestamp→日時変換set_index()
を利用してインデックスを割り振る
import pandas as pd
# データの読み込み
df = pd.read_csv('./sample.csv')
# タイムスタンプからdatetime64型の日付データに変換
# デフォルトはunit='ns'(ナノ秒)なので、unit='s'(秒)を指定する
df['DateTime'] = pd.to_datetime(df['Timestamp'], unit='s')
# インデックスとして設定する
df = df.set_index('DateTime')
# 不要だったらTimestampの列を削除
df = df.drop(columns='Timestamp')
# データ確認
print('----- df.info() -----')
print(df.info())
print('----- df.index ------')
print(df.index)
print('----- df ------------')
print(df)
結果
インデックスには日時変換された後のDatetimeIndexが指定されていることがわかる。
----- df.info() -----
<class 'pandas.core.frame.DataFrame'>
DatetimeIndex: 5 entries, 2011-12-31 07:52:00 to 2011-12-31 07:56:00
Data columns (total 1 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 number 5 non-null int64
dtypes: int64(1)
memory usage: 80.0 bytes
None
----- df.index ------
DatetimeIndex(['2011-12-31 07:52:00', '2011-12-31 07:53:00',
'2011-12-31 07:54:00', '2011-12-31 07:55:00',
'2011-12-31 07:56:00'],
dtype='datetime64[ns]', name='DateTime', freq=None)
----- df ------------
number
DateTime
2011-12-31 07:52:00 0
2011-12-31 07:53:00 1
2011-12-31 07:54:00 2
2011-12-31 07:55:00 3
2011-12-31 07:56:00 4