内容
筆者は記憶力がかなり低めで、日付型を処理する方法がうろ覚えなせいでよく調べ直してるので、まとめて忘れないようにしておきたい。
データが文字列、数値、unixだったときについて書いていきます。
この記事で使うサンプルデータ
import pandas as pd
from datetime import date
data = {'name': ['田中', '鈴木', '佐藤', '高橋'],
'birthday_str': ['19900512', '19851225', '20000315', '19970708'],
'birthday_int': [19900512, 19851225, 20000315, 19970708],
'hiredate': [date(2015, 4, 1), date(2010, 10, 15), date(2022, 2, 28), date(2018, 6, 1)],
'hiredate_unix': [1427862000, 1287107400, 1646016000, 1527843230]}
# データフレームを作成
df = pd.DataFrame(data)
df
# name birthday_str birthday_int hiredate hiredate_unix
# 0 田中 19900512 19900512 2015-04-01 1427862000
# 1 鈴木 19851225 19851225 2010-10-15 1287107400
# 2 佐藤 20000315 20000315 2022-02-28 1646016000
# 3 高橋 19970708 19970708 2018-06-01 1527843230
変換の仕方
pandas.to_datetimeで変換します。
「対象が文字列か数値型か」、ということでちょこちょこ設定する内容が変わるので順に見ていきましょう。
YYYYMMDDを文字列、数値型でそれぞれ変換
# 文字列型を変換する場合
pd.to_datetime(df['birthday_str'])
# 0 1990-05-12
# 1 1985-12-25
# 2 2000-03-15
# 3 1997-07-08
# Name: birthday_str, dtype: datetime64[ns]
# 数値型を変換する場合
pd.to_datetime(df['birthday_int'].astype('str'))
# 0 1990-05-12
# 1 1985-12-25
# 2 2000-03-15
# 3 1997-07-08
# Name: birthday_int, dtype: datetime64[ns]
こんな感じで数値型を扱う時には、対象を指定した後に".astype('str')"をいれることで正しく処理ができるようにしてあげます。
日付型をYYYYMMDDに変換
pandas.to_datetimeで変換したものにdt.strftime()で書式文字列を指定して処理してあげます。
pd.to_datetime(df['hiredate']).dt.strftime('%Y%m%d')
# 0 20150401
# 1 20101015
# 2 20220228
# 3 20180601
# Name: hiredate, dtype: object
unix時間を変換
今回unix時間は秒なのでunit='s'を指定して変換してます。
pd.to_datetime(df['hiredate_unix'].astype(str), unit='s')
# 0 2015-04-01 04:20:00
# 1 2010-10-15 01:50:00
# 2 2022-02-28 02:40:00
# 3 2018-06-01 08:53:50
# Name: hiredate_unix, dtype: datetime64[ns]
まとめ
pandas.to_datetimeだけで色々できる。えらい。