Pandas DataFrame で文字列を datetime に変換するには、このテンプレートを使用できます。
df['DataFrame Column'] = pd.to_datetime(df['DataFrame Column'], format=specify your format)
注記文字列は指定された形式に一致する必要があります。後ほど、異なる形式のシナリオをいくつか紹介します。
Pandas DataFrame で文字列を日時に変換する手順:
ステップ1: 変換するデータを収集する
まず、日時に変換するデータを収集します。
たとえば、店舗が開店または閉店する 3 つの異なる日付 (yyyymmdd 形式) に関する簡単なデータセットを次に示します。
Dates | Status |
20210305 | Opened |
20210316 | Opened |
20210328 | Closed |
ステップ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 が得られます。

「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 になっていることがわかります。

pd.to_datetime を適用する場合、デフォルトの形式は yyyymmdd であることに注意してください。したがって、上記の例では、コードから format =’%Y%m%d’ を削除できます。ただし、以下に示すように、他のシナリオでは、文字列データに合わせて正しい形式を指定する必要があります。
追加の形式の変換
日付が ddmmyyyy としてフォーマットされているとします。
Dates | Status |
05032021 | Opened |
16032021 | Opened |
28032021 | Closed |
その場合は、以下の形式を適用する必要があります (参考までに、次の表をチェックして、適用する必要がある正しい形式を確認してください)。
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 に変換されます。

日付が 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)
これで、日付時刻形式が取得されます。

日付にダッシュが含まれるようになったとします (例: ’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)
そして結果は次の通りです。

タイムスタンプ付きフォーマット
文字列に日付と時刻の両方が含まれているとします。
Dates | Status |
20210305093000 | Opened |
20210316093000 | Opened |
20210328200000 | Closed |
その場合、指定する必要がある形式は次のとおりです。
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)
日付時刻の形式が表示されます。

ここで、文字列に日付と時刻を区切るダッシュ文字(「-」)などの文字が含まれているとします。
Dates | Status |
20210305-093000 | Opened |
20210316-093000 | Opened |
20210328-200000 | Closed |
このシナリオでは、形式にダッシュも含める必要があります。
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)
そして結果は次の通りです。
