pandasで日付データを扱う

pandasでcsvデータを読み込む方法を前のnoteに書いたがそれの続き。

文字列型のデータをDateTime型に変換

pandasのDataFameに読み込んだデータはそのままだと文字列型になっているのでDateTime型に変更してあげるのが良い。

import datetime

df['A'] = pd.to_datetime(df['日時'])
df['B'] = pd.to_datetime(df['日時べた'], format='%Y%m%d %H%M%S')
df

'日時'のカラムの書式については一般的なDateTimeのスタイルのため'to_datetime`で直接指定するだけでDateTimeに変換してくれる。

'日時ベタ'のカラムの書式についてはハイフンを無くしたスタイルであるため`to_datetime'の引数でformatを指定することで変換出来る。

結果


これで'A'のカラムと'B'のカラムはDateTime型のデータとなった。

ある月のデータを抽出する

上記でDateTime型に変換したことで例えば2022年の10月のデータだけを抽出したいというような場合は以下のようにする。

import calendar

year = 2022
month = 10
week_of_firstday, lastday = calendar.monthrange(year, month)

d1 = datetime.datetime(year, month, 1)
d2 = datetime.datetime(year, month, lastday)

df[(df['A'] >= d1) & (df['A'] <= d2)]

なんとなくもっと簡単に指定できる方法があっても良さそうなのだが少し面倒くさい。何をやっているかというとcalendarモジュールを使ってある年月(2022年10月)の最終日を取得し、’A’カラムのDateTimeが2022年10月1日から2022年10月の最終日(31日)に一致するデータを抽出している。

結果

期待通りに2022年10月のデータだけが抽出されて表示されている。
なんとなくこれぐらいのことは一発で実現できても良いような気がするのだが…。

別解

よく考えたらこれだけで良いなと。

df[(df['A'].dt.year == 2022) & (df['A'].dt.month == 10)]


この記事が気に入ったらサポートをしてみませんか?