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_df
のdtypes
を確認すると、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)に設定する場合は、UTC
をtz_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