データの分析などを行っているとき、日付などを適したサイズに丸めることがよくあります。pandasではこれらが非常に簡単にできます。
データの事前準備
import pandas as pd
df = pd.DataFrame({'datetime': ['2018-04-01 12:59:40', '2019-05-01 01:22:43']})
df['datetime'] = pd.to_datetime(df['datetime']) # 文字列をdatetimeに変換する
丸め処理
pandas.Series.dt.roundを利用します。
このインターフェースは非常に便利で、日付や時間の丸め処理を簡単に行うことができます。通常は第一引数のfreqのみを指定してやれば十分でしょう。指定できるfreqについては、Offset Aliasesを参照してください。
注意点として、round()
は四捨五入のような振る舞いをします。もし切り捨てや切り上げが必要な場合は、後述する floor()
ceil()
を使用してください。
日に丸める場合
Series.dt.round()
に渡す第一引数を”D”にします。
df['datetime'] = df['datetime'].dt.round("D")
print(df)
結果
datetime
0 2018-04-02
1 2019-05-01
時間に丸める場合
Series.dt.round()
に渡す第一引数を”H”にします。
df['datetime'] = df['datetime'].dt.round("H")
print(df)
結果
datetime
0 2018-04-01 13:00:00
1 2019-05-01 01:00:00
15分ごとに丸める場合
HやDの前に数字を付加することによって、自由自在に時間を丸めることができます。やってみましょう。
Series.dt.round()
に渡す第一引数を”15T”にします。
df['datetime'] = df['datetime'].dt.round("15T")
print(df)
結果
datetime
0 2018-04-01 13:00:00
1 2019-05-01 01:30:00
切り捨て・切り上げ
切り捨て・切り上げを行いたいときは、 floor()
や、 ceil()
を利用します。
floor
df['datetime'] = df['datetime'].dt.floor("D")
print(df)
結果
datetime
0 2018-04-01
1 2019-05-01
ceil
df['datetime'] = df['datetime'].dt.ceil("D")
print(df)
結果
datetime
0 2018-04-02
1 2019-05-02
まとめ
pandasでは、時間軸でデータを抽出したりといったことが非常に多いですが、秒やミリ秒まで含まれていると扱いづらいことも多いです。困ったときに是非活用してみてください。