【Python】pandasで読み込んだデータのtimestampを日付に変換し、インデックスにする

スポンサーリンク
python-logo Python

データ分析を行う時、常にいい感じのデータを入手できるわけではない。
地道な前処理が必要である。

状況

今回の状況は以下の通り。

  • 株価のような時系列データを扱いたい
  • インデックスに日付を設定したい
  • 入手したデータに格納されている日時は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
タイトルとURLをコピーしました