1から始めるPythonデータ分析 - やりたいこと逆引きリスト ▶︎▶︎

【Python】日付型へフォーマット変換する方法|to_datetime

日付型にフォーマットの変換

Pythonでは日付のデータ型として「日付型:datetime」があります

「文字列型」や「数値型」とは違い、特殊なデータ型である「日付」を扱うことができます

例えば「12月31日」の次が「12月32日」ではなく「1月1日」になります

今回は文字列や数値型から日付型への変換について方法をご紹介します

文字列/数値型から日付に変換する

Pythonで文字列を日付型に変換するイメージ

データをシステムから取得するとき、最初からデータが日付型であるとは限りません

「2021年5月8日」のように一見、日付型に見えるデータでも裏側では「文字列型」だったりします

また「20210508」のように、8桁の数値で日付型を表現する場合もあります

これらの日付型ではないデータをpandasのto_datetimeで変換することができます

事前準備

事前にpandasをインポートしておきます

import pandas

※サンプルデータ:東京都の気温

気温のイメージ
気温のイメージ

※日付は数値型で「yyyymmdd」の8桁になります

文字列/数値型から日付の変換

Pythonで文字列を日付型に変換するイメージ

今回は8桁の数値型で入っている年月日を、日付型に変換します

to_datetimeを利用することで簡単に変換することができます

pd.to_datetime(df['日付'], format='%Y%m%d')
Pythonで文字列を日付型に変換するイメージ

日付書式の指定

formatには変換前のデータがどういう形なのかを指定する必要があります

少し分かりにくいですが、それぞれ書式が存在しています

例えば「4桁の年」を指定するには「%Y」を記載し、「月」は「%m」、「日」は「%d」を続けて書きます

つまり「20210508」は「%Y%m%d」を指定することになります

Pythonで数値型を日付型に変換するイメージのformat設定

日付ごとの書式一覧

書式 内容
%Y西暦4桁1999, 2000, 2001, 2002 … 2025
%y西暦2桁99, 00, 01, 02 … 25
%m月2桁01, 02, 03, 04, 05 … 12
%b英語の月(省略)Jan, Feb, … Dec
%B英語の月(フル)January, February, … December
%d日2桁01, 02, 03, 04, 05 … 31
%H時 24時間00, 01, 02, 03, 04 … 23
%I時 12時間 00, 01, 02, 03, 04 … 12
%pAM、PMAM, PM , am , pm
%M分2桁00, 01, 02, 03, 04 … 59
%S秒2桁 00, 01, 02, 03, 04 … 59
%A 曜日名 Sunday, Monday … Saturday
%a 曜日名(短縮形) Sun, Mon … Sat

他の文字列が入っている場合

pd.to_datetime('2021年5月8日', format='%Y年%m月%d日')

「2021年5月8日」のように数値以外に違う記号が入っている場合は、「%Y年%m月%d日」のように記載します

Pythonで文字列型を日付型に変換するイメージのformat設定

pd.to_datetime('2021/5/8', format='%Y/%m/%d')

「/」スラッシュが入っている場合も「%Y/%m/%d」書式の間に「/」を入れましょう


pd.to_datetime('2021 5 8', format='%Y %m %d')

「空白」の場合も「%Y %m %d」書式の間に空白を空けて記述します


pd.to_datetime('2021 may 8', format='%Y %b %d')

英語の月表示(Jan/Feb/Mar)なども「%b」を使えば変換することができます

to_datetimeの書式は分かりにくい部分がありますが、慣れれば簡単に変換することができるようになります

まとめ

今回は to_datetimeを利用して文字列や数値のデータを「日付型」に変換する方法をご紹介してきました

システムによって様々なデータ型で日付は格納されています

書式の設定を一通り覚えて変換を試してみてください

お気に入り登録お願いします

2 COMMENTS

中田昌義

日付データで
198531と19850301を区別して処理できますか?
できない場合は、どの様にすればdatetimeで処理できるようになりますか?

返信する
編集長

ご質問ありがとうございます。
to_datetimeでformat=’%Y%m%d’と指定すると、どちらも「1985年5月31日」という日付データになるため区別することはできません。
何かの理由で2つの日付パターンを分ける場合は、日付に変更するのではなく桁数を取得した方が良いかもしれません。
len(str(198531))
len(str(19850301))

返信する

編集長 へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です