Python、機械学習

【Python】Pandasで数字やロット番号を日付(datetime型)に変換するシンプルなやり方

データ分析で数字やロット番号が入ったdataframeの表を扱う場面、しょっちゅうあると思います。

これらの数字データを日付(datetime型)に変更する方法は、Googleで検索すればすぐ出てきます。

ただし、いろんなやり方が紹介されていて、読むのに何気に時間が奪われます。読むのも疲れますし。

そこで、「これだけ覚えとこう!」というものをここに書きます。

以下、令和時代の最初の日である2019年5月1日を例にとって説明します。

とりあえず、pd.to_datetime(df[‘○○’], format=’△△’)だけ覚えとけばいい

小題のとおり、Pandasのpd.to_datetime(df[‘○○’], format=’△△’)だけ覚えとけば良いです。

たいていはこのpd.to_datetimeで事足りると思います。これ以外のマニアックな方法は、Googleでつど検索すればよいかと思います。

190501という文字列を日付に変更する

import pandas as pd
df = pd.read.csv('□□.csv')

df['年月日'] = pd.to_datetime(df['ロット番号'], format='%y%m%d')

これにより、年月日という名前のdatetime型のカラムができます。

そして、df[‘ロット番号’]=190501の行の df[‘年月日’]は、2019-05-01となります。

formatのところはロット番号の表し方を記号化したものを入れます。

%yは年の下2ケタを表し、%mは月を表す2ケタ、%dは日を表す2ケタです。したがって、%y%m%dで6ケタのロット番号を表せます。

余談ですが・・・

余談ですが、%Yとすると、年を4ケタのフル表示することになります。ですので、こんな書き方もできます。

df['ロット番号'] = df['ロット番号'],+200000
df['年月日'] = pd.to_datetime(df['ロット番号'], format='%Y%m%d')

元々のロット番号に200000を足して8ケタ表示にし、formatに大文字の%Yを入れるということです。

例えば、ロット番号が「190501」なら、「20190501」に書き直してから%Y%m%dでdatetimeに変換するということです。

19/05/01という文字列を日付に変更する

formatのところを%y/%m/%dにするだけです。

df['年月日'] = pd.to_datetime(df['ロット番号'], format='%y%m%d')

2019/05/01という文字列を日付に変更する

formatのところを%Y/%m/%dにするだけです。年のところは大文字%Yです。

df['年月日'] = pd.to_datetime(df['ロット番号'], format='%Y%m%d')

2019-05-01という文字列を日付に変更する

formatのところを%Y-%m-%dにするだけです。

df['年月日'] = pd.to_datetime(df['ロット番号'], format='%Y%m%d')

まとめ

というわけで、pd.to_datetimeのカッコ内に変換したいカラムとformatを入れれば簡単にdatetime型の日付カラムが作れます。

formatのところをうまく書けば、さまざまなロット番号や文字列を変換できます。