【Python】文字列を日付型に変換する方法を解説

Pythonで文字列を日付型に変換する方法を知りたいですか?この記事では、Pythonのdatetimedateutilpandasモジュールを使って、文字列を日付型に変換する方法をわかりやすく解説します。

さらに、変換時に発生する可能性のあるエラーの対処方法についても説明します。

初心者の方でも理解しやすいように、具体的なサンプルコードとその実行結果を交えて説明しますので、ぜひ最後までご覧ください。

目次から探す

datetimeモジュールを使った変換方法

Pythonで文字列を日付型に変換する際に最もよく使われるのが、datetimeモジュールです。

このモジュールには、文字列を日付型に変換するための便利なメソッドがいくつか含まれています。

その中でも特に重要なのがstrptimeメソッドです。

strptimeメソッドの基本

strptimeの構文

strptimeメソッドは、指定されたフォーマットに従って文字列を日付型に変換します。

基本的な構文は以下の通りです。

from datetime import datetime
date_object = datetime.strptime(date_string, format)
  • date_string: 変換したい日付の文字列
  • format: 文字列の日付フォーマットを指定する文字列

フォーマットコードの一覧

strptimeメソッドで使用するフォーマットコードは、以下のように指定します。

これらのコードを組み合わせて、任意の日付フォーマットを表現できます。

フォーマットコード説明
%Y4桁の年2023
%m2桁の月01
%d2桁の日15
%H2桁の時(24時間)14
%M2桁の分30
%S2桁の秒45

実際の変換例

基本的な日付フォーマット

まずは、基本的な日付フォーマットを使った変換例を見てみましょう。

from datetime import datetime
date_string = "2023-10-15"
date_object = datetime.strptime(date_string, "%Y-%m-%d")
print(date_object)

このコードを実行すると、以下のような出力が得られます。

2023-10-15 00:00:00

時間を含む日付フォーマット

次に、時間を含む日付フォーマットの例です。

from datetime import datetime
date_string = "2023-10-15 14:30:45"
date_object = datetime.strptime(date_string, "%Y-%m-%d %H:%M:%S")
print(date_object)

このコードを実行すると、以下のような出力が得られます。

2023-10-15 14:30:45

カスタムフォーマット

最後に、カスタムフォーマットの例を見てみましょう。

例えば、月と年だけを含むフォーマットです。

from datetime import datetime
date_string = "October 2023"
date_object = datetime.strptime(date_string, "%B %Y")
print(date_object)

このコードを実行すると、以下のような出力が得られます。

2023-10-01 00:00:00

このように、datetimeモジュールのstrptimeメソッドを使うことで、さまざまな形式の文字列を日付型に変換することができます。

フォーマットコードを適切に使用することで、任意の形式の文字列を簡単に変換できるのが特徴です。

dateutilモジュールを使った変換方法

Pythonの標準ライブラリであるdatetimeモジュールに加えて、dateutilモジュールを使うことで、文字列を日付型に変換する作業がさらに簡単になります。

特に、dateutilparserモジュールは、文字列の日付フォーマットを自動的に認識してくれるため、非常に便利です。

parser.parseメソッドの基本

dateutilモジュールのparser.parseメソッドを使うと、文字列を簡単に日付型に変換できます。

このメソッドは、文字列のフォーマットを自動的に認識し、適切なdatetimeオブジェクトに変換してくれます。

parser.parseの構文

parser.parseメソッドの基本的な構文は以下の通りです。

from dateutil import parser
date = parser.parse("日付文字列")

自動フォーマット認識の利点

parser.parseメソッドの最大の利点は、文字列の日付フォーマットを自動的に認識してくれる点です。

これにより、事前にフォーマットを指定する必要がなく、さまざまな形式の日付文字列を簡単に処理できます。

実際の変換例

それでは、具体的な例を見ていきましょう。

基本的な日付フォーマット

まずは、基本的な日付フォーマットの文字列を変換する例です。

from dateutil import parser
# 基本的な日付フォーマット
date_str = "2023-10-01"
date = parser.parse(date_str)
print(date)  # 出力: 2023-10-01 00:00:00

この例では、2023-10-01という文字列がdatetimeオブジェクトに変換されます。

時間を含む日付フォーマット

次に、時間を含む日付フォーマットの文字列を変換する例です。

from dateutil import parser
# 時間を含む日付フォーマット
date_str = "2023-10-01 14:30:00"
date = parser.parse(date_str)
print(date)  # 出力: 2023-10-01 14:30:00

この例では、2023-10-01 14:30:00という文字列がdatetimeオブジェクトに変換されます。

曖昧な日付フォーマットの処理

最後に、曖昧な日付フォーマットの文字列を変換する例です。

from dateutil import parser
# 曖昧な日付フォーマット
date_str = "October 1, 2023"
date = parser.parse(date_str)
print(date)  # 出力: 2023-10-01 00:00:00

この例では、October 1, 2023という文字列がdatetimeオブジェクトに変換されます。

このように、parser.parseメソッドはさまざまな形式の日付文字列を自動的に認識してくれるため、非常に便利です。

以上が、dateutilモジュールを使った文字列を日付型に変換する方法です。

次は、pandasモジュールを使った変換方法について見ていきましょう。

pandasモジュールを使った変換方法

Pythonのデータ解析ライブラリであるpandasは、データフレームを扱う際に非常に便利です。

特に、文字列を日付型に変換するためのto_datetimeメソッドは強力で、様々なフォーマットの文字列を簡単に日付型に変換することができます。

to_datetimeメソッドの基本

to_datetimeの構文

to_datetimeメソッドの基本的な構文は以下の通りです。

pandas.to_datetime(arg, format=None, errors='raise')
引数名説明
arg変換したい文字列、リスト、またはデータフレームの列
format文字列のフォーマットを指定するオプション

指定しない場合、自動的にフォーマットを推測します。

  • errors: エラー処理の方法を指定します。

'raise'(デフォルト)はエラーを発生させ、'coerce'は無効なデータをNaT(Not a Time)に変換し、'ignore'はエラーを無視します。

フォーマット指定の方法

to_datetimeメソッドでは、format引数を使って文字列のフォーマットを指定することができます。

例えば、%Y%m%dは「年-月-日」の形式を表します。

以下にいくつかのフォーマットコードの例を示します。

フォーマット指定子説明
%Y4桁の年 (例: 2023)
%m2桁の月 (例: 01)
%d2桁の日 (例: 15)
%H2桁の時 (例: 14)
%M2桁の分 (例: 30)
%S2桁の秒 (例: 45)

実際の変換例

基本的な日付フォーマット

まずは、基本的な日付フォーマットの文字列を日付型に変換する例を見てみましょう。

import pandas as pd
# 文字列のリスト
date_strings = ["2023-01-01", "2023-02-15", "2023-03-30"]
# 文字列を日付型に変換
dates = pd.to_datetime(date_strings)
print(dates)
DatetimeIndex(['2023-01-01', '2023-02-15', '2023-03-30'], dtype='datetime64[ns]', freq=None)

時間を含む日付フォーマット

次に、時間を含む日付フォーマットの文字列を日付型に変換する例を見てみましょう。

import pandas as pd
# 文字列のリスト
datetime_strings = ["2023-01-01 14:30:00", "2023-02-15 09:45:00", "2023-03-30 18:00:00"]
# 文字列を日付型に変換
datetimes = pd.to_datetime(datetime_strings)
print(datetimes)
DatetimeIndex(['2023-01-01 14:30:00', '2023-02-15 09:45:00', '2023-03-30 18:00:00'], dtype='datetime64[ns]', freq=None)

大量データの変換

pandasは大量のデータを効率的に処理することができます。

以下は、データフレームの列を日付型に変換する例です。

import pandas as pd
# データフレームの作成
data = {
    "date_strings": ["2023-01-01", "2023-02-15", "2023-03-30", "2023-04-10", "2023-05-20"]
}
df = pd.DataFrame(data)
# 文字列の列を日付型に変換
df["dates"] = pd.to_datetime(df["date_strings"])
print(df)
date_strings      dates
0   2023-01-01 2023-01-01
1   2023-02-15 2023-02-15
2   2023-03-30 2023-03-30
3   2023-04-10 2023-04-10
4   2023-05-20 2023-05-20

このように、pandasto_datetimeメソッドを使うことで、簡単に文字列を日付型に変換することができます。

特に大量のデータを扱う場合に非常に便利です。

エラーハンドリング

文字列を日付型に変換する際には、さまざまなエラーが発生する可能性があります。

これらのエラーを適切に処理することで、プログラムの安定性と信頼性を向上させることができます。

ここでは、変換エラーの種類とその対処方法について詳しく解説します。

変換エラーの種類

無効な日付フォーマット

無効な日付フォーマットとは、指定されたフォーマットに一致しない文字列のことを指します。

例えば、2023-10-15という文字列を%d/%m/%Yというフォーマットで変換しようとするとエラーが発生します。

from datetime import datetime
date_str = "2023-10-15"
try:
    date_obj = datetime.strptime(date_str, "%d/%m/%Y")
except ValueError as e:
    print(f"エラー: {e}")

このコードを実行すると、以下のようなエラーメッセージが表示されます。

エラー: time data '2023-10-15' does not match format '%d/%m/%Y'

存在しない日付

存在しない日付とは、例えば2023-02-30のように、カレンダー上で存在しない日付のことを指します。

このような日付を変換しようとするとエラーが発生します。

from datetime import datetime
date_str = "2023-02-30"
try:
    date_obj = datetime.strptime(date_str, "%Y-%m-%d")
except ValueError as e:
    print(f"エラー: {e}")

このコードを実行すると、以下のようなエラーメッセージが表示されます。

エラー: day is out of range for month

エラー処理の方法

try-exceptブロックの使用

エラーを適切に処理するためには、try-exceptブロックを使用します。

これにより、エラーが発生した場合でもプログラムがクラッシュせず、適切なエラーメッセージを表示することができます。

from datetime import datetime
date_str = "2023-02-30"
try:
    date_obj = datetime.strptime(date_str, "%Y-%m-%d")
    print(f"変換成功: {date_obj}")
except ValueError as e:
    print(f"エラー: {e}")

このコードを実行すると、エラーが発生した場合でもプログラムが停止せず、エラーメッセージが表示されます。

エラー: day is out of range for month

デフォルト値の設定

エラーが発生した場合にデフォルト値を設定することで、プログラムの動作を継続させることができます。

例えば、エラーが発生した場合に現在の日付をデフォルト値として設定する方法があります。

from datetime import datetime
date_str = "2023-02-30"
try:
    date_obj = datetime.strptime(date_str, "%Y-%m-%d")
except ValueError:
    date_obj = datetime.now()
    print("無効な日付フォーマット。現在の日付を使用します。")
print(f"日付: {date_obj}")

このコードを実行すると、エラーが発生した場合でも現在の日付が設定され、プログラムが正常に動作します。

無効な日付フォーマット。現在の日付を使用します。
日付: 2023-10-15 12:34:56.789012

以上が、文字列を日付型に変換する際のエラーハンドリングの基本的な方法です。

これらの方法を活用することで、より堅牢なプログラムを作成することができます。

目次から探す