pandasを用いた日時データの扱い方

3.5. pandasを用いた日時データの扱い方#

3.5.1. datetime#

import pandas as pd
import numpy as np
r_df = pd.read_csv('./testcsv.csv', index_col = 0)
r_df.head(2)
price num datetime
0 100.0 5 2018-06-01 00:00:00
1 40.0 2 2018-06-27 03:00:00

r_dfdtypesを確認すると、datetime列がobject型として扱われています

r_df.dtypes
price       float64
num           int64
datetime     object
dtype: object

Dateライクなデータを日付データとして扱うにはto_datime()を使います

r_df['datetime'] =pd.to_datetime(r_df['datetime'])
r_df.dtypes
price              float64
num                  int64
datetime    datetime64[ns]
dtype: object

datetimeとして扱うと日付や月、時間、曜日などを抽出しやすくなります

r_df['datetime'].dt.date
0    2018-06-01
1    2018-06-27
2    2018-07-23
3    2018-08-18
4    2018-09-13
5    2018-10-09
6    2018-11-04
7    2018-11-30
8    2018-12-27
9    2019-01-22
Name: datetime, dtype: object

日付だけを取り出したい場合はdt.dateで抜き出すことができます

r_df['date'] = r_df['datetime'].dt.date

時刻だけを取り出したい場合はdt.timeで抜き出すことができます

r_df['datetime'].dt.time
0    00:00:00
1    03:00:00
2    06:00:00
3    09:00:00
4    12:00:00
5    15:00:00
6    18:00:00
7    21:00:00
8    00:00:00
9    03:00:00
Name: datetime, dtype: object
r_df['time'] = r_df['datetime'].dt.time

月だけを取り出したい場合はdt.monthで抜き出すことができます

r_df['datetime'].dt.month
0     6
1     6
2     7
3     8
4     9
5    10
6    11
7    11
8    12
9     1
Name: datetime, dtype: int32
r_df['month'] = r_df['datetime'].dt.month
r_df['year'] = r_df['datetime'].dt.year
r_df.head(2)
price num datetime date time month year
0 100.0 5 2018-06-01 00:00:00 2018-06-01 00:00:00 6 2018
1 40.0 2 2018-06-27 03:00:00 2018-06-27 03:00:00 6 2018
r_df.dtypes
price              float64
num                  int64
datetime    datetime64[ns]
date                object
time                object
month                int32
year                 int32
dtype: object

3.5.2. タイムゾーン#

タイムゾーンを指定したり、他のタイムゾーンへの変換が必要な場合

協定世界時(UTC)に設定する場合は、UTCtz_localizeとします。

r_df['datetime'] = r_df['datetime'].dt.tz_localize('UTC')
print(r_df['datetime'].dt.tz)
UTC

日本時間に変換してみましょう

r_df['datetime_ja'] = r_df['datetime'].dt.tz_convert('Asia/Tokyo')
print(r_df['datetime_ja'].dt.tz)
Asia/Tokyo

他のタイムゾーンにも変換してみましょう

r_df['datetime_de'] = r_df['datetime_ja'].dt.tz_convert('Europe/Berlin')
print(r_df['datetime_de'].dt.tz)
Europe/Berlin