Pandas DataFrame で文字列を datetime に変換するには、このテンプレートを使用できます。

df['DataFrame Column'] = pd.to_datetime(df['DataFrame Column'], format=specify your format)

注記文字列は指定された形式に一致する必要があります。後ほど、異なる形式のシナリオをいくつか紹介します。

Pandas DataFrame で文字列を日時に変換する手順:

ステップ1: 変換するデータを収集する

まず、日時に変換するデータを収集します。

たとえば、店舗が開店または閉店する 3 つの異なる日付 (yyyymmdd 形式) に関する簡単なデータセットを次に示します。

DatesStatus
20210305Opened
20210316Opened
20210328Closed

ステップ2: データフレームを作成する

次に、上記のデータをPythonで取得するためのDataFrameを作成します。「dates」列の値を引用符で囲むことで、日付を文字列として取得できます。

import pandas as pd

values = {'dates':  ['20210305','20210316','20210328'],
          'status': ['Opened','Opened','Closed']
          }

df = pd.DataFrame(values)

print(df)
print(df.dtypes)

Python でコードを実行すると、次の DataFrame が得られます。

Pandas DataFrame で文字列を日付時刻に変換する方法 1

「dates」は実際には文字列(オブジェクトによって表される)として保存されていることに注意してください。

ステップ3: データフレーム内の文字列を日付時刻に変換する

次に、以下のテンプレートを使用して、文字列を Pandas DataFrame の datetime に変換します。

df['DataFrame Column'] = pd.to_datetime(df['DataFrame Column'], format=specify your format)

この例では、日付の形式は yyyymmdd であることを思い出してください。

この日付形式は次のように表すことができます。

format='%Y%m%d'

注記文字列データ(yyyymmdd)は指定された形式(%Y%m%d)と一致する必要があります。適用可能な様々な形式については、以下の資料を参照してください。

この例では、文字列を datetime に変換する完全な Python コードは次のようになります。

import pandas as pd

values = {'dates': ['20210305','20210316','20210328'],
          'status': ['Opened','Opened','Closed']
          }

df = pd.DataFrame(values)

df['dates'] = pd.to_datetime(df['dates'], format='%Y%m%d')

print(df)
print(df.dtypes)

「dates」列のデータ型が datetime になっていることがわかります。

Pandas DataFrame で文字列を日付時刻に変換する方法 2

pd.to_datetime を適用する場合、デフォルトの形式は yyyymmdd であることに注意してください。したがって、上記の例では、コードから format =’%Y%m%d’ を削除できます。ただし、以下に示すように、他のシナリオでは、文字列データに合わせて正しい形式を指定する必要があります。

追加の形式の変換

日付が ddmmyyyy としてフォーマットされているとします。

DatesStatus
05032021Opened
16032021Opened
28032021Closed

その場合は、以下の形式を適用する必要があります (参考までに、次の表をチェックして、適用する必要がある正しい形式を確認してください)。

format='%d%m%Y'

完全な Python コードは次のとおりです。

import pandas as pd

values = {'dates':  ['05032021','16032021','28032021'],
          'status': ['Opened','Opened','Closed']
          }

df = pd.DataFrame(values)

df['dates'] = pd.to_datetime(df['dates'], format='%d%m%Y')

print(df)
print(df.dtypes)

以前と同様に、文字列は datetime に変換されます。

Pandas DataFrame で文字列を日付時刻に変換する方法 3

日付が ddmmmyyyy 形式 (例: 05Mar2021) の場合はどうなりますか?

次に、以下の形式を適用する必要があります (「m」を「b」に変更します)。

format='%d%b%Y'

したがって、完全な Python コードは次のようになります。

import pandas as pd

values = {'dates':  ['05Mar2021','16Mar2021','28Mar2021'],
          'status': ['Opened','Opened','Closed']
          }

df = pd.DataFrame(values)

df['dates'] = pd.to_datetime(df['dates'], format='%d%b%Y')

print(df)
print(df.dtypes)

これで、日付時刻形式が取得されます。

Pandas DataFrame で文字列を日付時刻に変換する方法 4

日付にダッシュが含まれるようになったとします (例: ’05-Mar-2021′)。

その場合は、次のようにダッシュを追加するだけです。

format='%d-%b-%Y'

完全な Python コードは次のとおりです。

import pandas as pd

values = {'dates':  ['05-Mar-2021','16-Mar-2021','28-Mar-2021'],
          'status': ['Opened','Opened','Closed']
          }

df = pd.DataFrame(values)

df['dates'] = pd.to_datetime(df['dates'], format='%d-%b-%Y')

print(df)
print(df.dtypes)

そして結果は次の通りです。

Pandas DataFrame で文字列を日付時刻に変換する方法 5

タイムスタンプ付きフォーマット

文字列に日付と時刻の両方が含まれているとします。

DatesStatus
20210305093000Opened
20210316093000Opened
20210328200000Closed

その場合、指定する必要がある形式は次のとおりです。

format='%Y%m%d%H%M%S'

したがって、完全な Python コードは次のようになります。

import pandas as pd

values = {'dates':  ['20210305093000','20210316093000','20210328200000'],
          'status': ['Opened','Opened','Closed']
          }

df = pd.DataFrame(values)

df['dates'] = pd.to_datetime(df['dates'], format='%Y%m%d%H%M%S')

print(df)
print(df.dtypes)

日付時刻の形式が表示されます。

Pandas DataFrame で文字列を日付時刻に変換する方法 6

ここで、文字列に日付と時刻を区切るダッシュ文字(「-」)などの文字が含まれているとします。

DatesStatus
20210305-093000Opened
20210316-093000Opened
20210328-200000Closed

このシナリオでは、形式にダッシュも含める必要があります。

format='%Y%m%d-%H%M%S'

完全な Python コードは次のとおりです。

import pandas as pd

values = {'dates':  ['20210305-093000','20210316-093000','20210328-200000'],
          'status': ['Opened','Opened','Closed']
          }

df = pd.DataFrame(values)

df['dates'] = pd.to_datetime(df['dates'], format='%Y%m%d-%H%M%S')

print(df)
print(df.dtypes)

そして結果は次の通りです。

Pandas DataFrame で文字列を日付時刻に変換する方法 7