LoginSignup
1
2

pandasで日付データをいじる、まとめ

Posted at

内容

筆者は記憶力がかなり低めで、日付型を処理する方法がうろ覚えなせいでよく調べ直してるので、まとめて忘れないようにしておきたい。
データが文字列、数値、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だけで色々できる。えらい。

参考文献

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2