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

Pythonでは、文字列を日付型に変換するためにdatetimeモジュールを使用します。

特にdatetime.strptime()関数が便利で、文字列とそのフォーマットを指定することでdatetimeオブジェクトに変換できます。

例えば、文字列\”2023-10-15\”を日付型に変換するには、datetime.strptime("2023-10-15", "%Y-%m-%d")と記述します。

この方法を使うことで、様々なフォーマットの文字列を簡単に日付型に変換することが可能です。

この記事でわかること
  • 文字列を日付型に変換する基本的な方法
  • strptime関数のフォーマット指定子の使い方
  • pandasを使った日付型への変換
  • 日付型データの加算・減算や比較方法
  • 日付型データのフィルタリングやグルーピングの手法

目次から探す

文字列を日付型に変換する方法

Pythonでは、文字列を日付型に変換するために、主にdatetimeモジュールのstrptime関数を使用します。

この関数を使うことで、特定のフォーマットに従った文字列を日付型に変換することができます。

strptime関数の使い方

strptime関数は、文字列とそのフォーマットを引数に取り、対応するdatetimeオブジェクトを返します。

基本的な使い方は以下の通りです。

from datetime import datetime
# 文字列を日付型に変換
date_string = "2023-10-01 14:30:00"
date_format = "%Y-%m-%d %H:%M:%S"
date_object = datetime.strptime(date_string, date_format)
print(date_object)

このコードを実行すると、2023-10-01 14:30:00という文字列がdatetimeオブジェクトに変換され、出力されます。

strptime関数のフォーマット指定子

strptime関数では、文字列のフォーマットを指定するために、いくつかの指定子を使用します。

以下に主要な指定子を示します。

スクロールできます
指定子説明
%Y4桁の年2023
%y2桁の年23
%m2桁の月(01-12)10
%d2桁の日(01-31)01
%H24時間制の時間(00-23)14
%M分(00-59)30
%S秒(00-59)00

その他の指定子

  • %a: 曜日の省略名(例: Mon)
  • %A: 曜日のフル名(例: Monday)
  • %b: 月の省略名(例: Oct)
  • %B: 月のフル名(例: October)

例: 基本的な文字列から日付への変換

以下の例では、シンプルな日付文字列をdatetimeオブジェクトに変換します。

from datetime import datetime
# 基本的な日付文字列
date_string = "2023-10-01"
date_format = "%Y-%m-%d"
date_object = datetime.strptime(date_string, date_format)
print(date_object)

このコードを実行すると、2023-10-01という文字列がdatetimeオブジェクトに変換され、出力されます。

例: 複雑なフォーマットの文字列から日付への変換

複雑なフォーマットの文字列を変換する例を示します。

from datetime import datetime
# 複雑な日付文字列
date_string = "01-Oct-2023 14:30:00"
date_format = "%d-%b-%Y %H:%M:%S"
date_object = datetime.strptime(date_string, date_format)
print(date_object)

このコードを実行すると、01-Oct-2023 14:30:00という文字列がdatetimeオブジェクトに変換され、出力されます。

pandasを使った文字列の変換

Pythonのデータ分析ライブラリであるpandasを使用すると、文字列を日付型に変換する作業が非常に簡単になります。

pandasto_datetime関数を使うことで、さまざまなフォーマットの文字列を効率的に日付型に変換できます。

pandasのインポート方法

まず、pandasを使用するためには、ライブラリをインポートする必要があります。

以下のようにインポートします。

import pandas as pd

to_datetime関数の使い方

to_datetime関数は、文字列やリスト、シリーズを日付型に変換するための関数です。

基本的な使い方は以下の通りです。

import pandas as pd
# 文字列を日付型に変換
date_string = "2023-10-01"
date_object = pd.to_datetime(date_string)
print(date_object)

このコードを実行すると、2023-10-01という文字列がTimestampオブジェクトに変換され、出力されます。

例: シンプルな文字列から日付への変換

以下の例では、シンプルな日付文字列をto_datetime関数を使って変換します。

import pandas as pd
# シンプルな日付文字列
date_string = "2023-10-01"
date_object = pd.to_datetime(date_string)
print(date_object)

このコードを実行すると、2023-10-01Timestampオブジェクトに変換され、出力されます。

例: 複雑なフォーマットの文字列から日付への変換

複雑なフォーマットの文字列を変換する例を示します。

import pandas as pd
# 複雑な日付文字列
date_string = "01-Oct-2023 14:30:00"
date_object = pd.to_datetime(date_string, format="%d-%b-%Y %H:%M:%S")
print(date_object)

このコードを実行すると、01-Oct-2023 14:30:00という文字列がTimestampオブジェクトに変換され、出力されます。

to_datetime関数は、フォーマットを指定することで、より複雑な日付文字列にも対応できます。

応用例

文字列を日付型に変換した後は、さまざまな操作が可能です。

ここでは、日付型データの操作やフィルタリング、グルーピングなどの応用例を紹介します。

日付型に変換したデータの操作

日付型データを操作することで、データ分析や処理がより効率的に行えます。

日付の加算・減算

日付型データに対して、日数や時間を加算・減算することができます。

以下の例では、日付に7日を加算する方法を示します。

from datetime import datetime, timedelta
# 日付型データ
date_object = datetime.strptime("2023-10-01", "%Y-%m-%d")
# 7日加算
new_date = date_object + timedelta(days=7)
print(new_date)

このコードを実行すると、2023-10-08という新しい日付が出力されます。

日付の比較

日付型データ同士を比較することも可能です。

以下の例では、2つの日付を比較します。

from datetime import datetime
# 日付型データ
date1 = datetime.strptime("2023-10-01", "%Y-%m-%d")
date2 = datetime.strptime("2023-10-15", "%Y-%m-%d")
# 比較
if date1 < date2:
    print("date1はdate2より前の日付です。")
else:
    print("date1はdate2より後の日付です。")

このコードを実行すると、date1はdate2より前の日付です。と出力されます。

日付型データのフォーマット変更

日付型データのフォーマットを変更するには、strftimeメソッドを使用します。

以下の例では、日付を異なるフォーマットで表示します。

from datetime import datetime
# 日付型データ
date_object = datetime.strptime("2023-10-01", "%Y-%m-%d")
# フォーマット変更
formatted_date = date_object.strftime("%d/%m/%Y")
print(formatted_date)

このコードを実行すると、01/10/2023というフォーマットに変換されて出力されます。

日付型データのフィルタリング

日付型データをフィルタリングすることで、特定の条件に合ったデータを抽出できます。

以下の例では、特定の日付以降のデータをフィルタリングします。

import pandas as pd
# 日付型データのシリーズ
date_series = pd.Series(pd.to_datetime(["2023-09-30", "2023-10-01", "2023-10-02"]))
# フィルタリング
filtered_dates = date_series[date_series > "2023-10-01"]
print(filtered_dates)

このコードを実行すると、2023-10-02という日付が出力されます。

日付型データのグルーピング

日付型データを使ってデータをグルーピングすることも可能です。

以下の例では、日付を基にデータをグルーピングします。

import pandas as pd
# 日付型データのシリーズ
data = {
    "date": pd.to_datetime(["2023-10-01", "2023-10-01", "2023-10-02"]),
    "value": [10, 20, 30]
}
df = pd.DataFrame(data)
# 日付でグルーピング
grouped = df.groupby("date").sum()
print(grouped)

このコードを実行すると、日付ごとの合計値が出力されます。

例えば、2023-10-01の日付に対して、合計値が30となります。

よくある質問

strptime関数でエラーが出る場合の対処法

strptime関数でエラーが発生する場合、主に以下の原因が考えられます。

  • フォーマットの不一致: 文字列のフォーマットが指定したフォーマットと一致しない場合、ValueErrorが発生します。

指定したフォーマットを確認し、文字列がそのフォーマットに従っているかを確認してください。

  • 無効な日付: 存在しない日付(例: 2023-02-30)を指定するとエラーになります。

日付の妥当性を確認してください。

pandasのto_datetime関数でエラーが出る場合の対処法

pandasto_datetime関数でエラーが発生する場合、以下の点を確認してください。

  • 無効なフォーマット: 文字列が正しい日付形式でない場合、ValueErrorが発生します。

format引数を使用して正しいフォーマットを指定することで解決できます。

  • NaTの処理: 無効な日付が含まれている場合、NaT(Not a Time)が返されます。

これを適切に処理するために、errors='coerce'オプションを使用することができます。

文字列のフォーマットが不明な場合の対処法

文字列のフォーマットが不明な場合、以下の方法を試してみてください。

  • pandasのto_datetimeを使用: to_datetime関数は、さまざまなフォーマットの文字列を自動的に解析し、日付型に変換します。

特に、errors='coerce'オプションを使うことで、無効な日付をNaTとして処理できます。

  • 正規表現を使用: 文字列のパターンを特定するために、正規表現を使用してフォーマットを推測することも可能です。

まとめ

この記事では、Pythonにおける文字列を日付型に変換する方法について詳しく解説しました。

strptime関数pandasto_datetime関数を使った基本的な変換方法から、日付型データの操作や応用例まで幅広く紹介しました。

日付型データの扱いに自信を持ち、実際のデータ分析や処理に活用してみてください。

  • URLをコピーしました!
目次から探す