はじめに
データ分析をしているとき、前処理でいつもやり方を忘れるのが日付型の操作です。
この記事では日付前処理でよく使う方法をまとめます。
前処理大全の項目を参考にさせていただきました。
#データの準備
処理に用いる適当なデータを準備します
import pandas as pd
import datetime
from datetime import timedelta
import random
#適当な日付の準備
time_list = []
time = datetime.datetime.now()
for j in range(100):
time += timedelta(hours=4)
time_list.append(time)
df = pd.DataFrame({"time":time_list})
df["time"] = df["time"].dt.strftime("%Y-%m-%d %H:%M:%S")
df.head()
日時と日付の変換
時間単位がいらない場合、年、月、日のみに変更します。
#日時型
df["time"] = pd.to_datetime(df["time"])
#日付型
df["date"] = df["time"].dt.date
df.head()
年、月、日、時刻、分、秒、曜日への変換
年、月などそれぞれの要素を取り出します。
#年などの取り出し
df["year"] = df["time"].dt.year
df["month"] = df["time"].dt.month
df["day"] = df["time"].dt.day
df["dayofweek"] = df["time"].dt.dayofweek
df["minute"] = df["time"].dt.minute
df["second"] = df["time"].dt.second
#指定形式への変換
df["time_tr"] = df["time"].dt.strftime("%H:%M:%S %Y-%m-%d")
df.head()
年月の差分を求める
0行目の列からどのくらい時間が経過したかを計算します。
日以下の小数点は求めない場合です。
#年と月(日以下を考慮しない)
df["year_diff"] = df["time"].dt.year - df.loc[0, "time"].year
df["month_diff"] = (df["time"].dt.year * 12 + df["time"].dt.month
- df.loc[0, "time"].year*12 - df.loc[0, "time"].month)
df.head()
日、時、秒の差分を求める
自分より小さい値を小数点として表現する場合です。
例えば36時間は1.5日となります。
#小数点以下も出すには下記
df["second_diff"] = (df["time"] - df.loc[0, "time"]).apply(lambda x:x.total_seconds())
df["minute_diff"] = df["second_diff"]/60
df["hour_diff"] = df["minute_diff"]/60
df["date_diff"] = df["hour_diff"]/24
df.head()
日時の増減
時間がずれているなどで一括で日時の増減をしたい場合です。
from datetime import timedelta
#下記コードでそれぞれ実行可能
df["time"] + timedelta(days=1)
df["time"] + timedelta(hours=1)
df["time"] + timedelta(minutes=1)
df["time"] + timedelta(seconds=1)
##まとめ
差分の求め方はいつも忘れてしまいますのでこれで安心です。
)