LoginSignup
15
30

More than 3 years have passed since last update.

pythonの日付列の前処理を完全攻略する

Last updated at Posted at 2021-04-29

はじめに

データ分析をしているとき、前処理でいつもやり方を忘れるのが日付型の操作です。
この記事では日付前処理でよく使う方法をまとめます。
前処理大全の項目を参考にさせていただきました。

データの準備

処理に用いる適当なデータを準備します

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()

こんな感じのデータができる。
image.png

日時と日付の変換

時間単位がいらない場合、年、月、日のみに変更します。

#日時型
df["time"] = pd.to_datetime(df["time"])

#日付型
df["date"] = df["time"].dt.date
df.head()

image.png

年、月、日、時刻、分、秒、曜日への変換

年、月などそれぞれの要素を取り出します。

#年などの取り出し
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()

image.png

年月の差分を求める

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()

image.png

日、時、秒の差分を求める

自分より小さい値を小数点として表現する場合です。
例えば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()

image.png

日時の増減

時間がずれているなどで一括で日時の増減をしたい場合です。

from datetime import timedelta

#下記コードでそれぞれ実行可能
df["time"] + timedelta(days=1)
df["time"] + timedelta(hours=1)
df["time"] + timedelta(minutes=1)
df["time"] + timedelta(seconds=1)

まとめ

差分の求め方はいつも忘れてしまいますのでこれで安心です。

)

15
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
30