LoginSignup
2
1

More than 1 year has passed since last update.

Pandasによる日付の計算

Posted at

Pythonで日付の計算はほかの言語と比較してライブラリー多く存在するため、ローカルルール部分があるので、使う時に注意が必要
主にPure Pythonで使い場合とPandasで使う場合が多いので、この章はPandasでまとめたい。
ただし、すべて賄うことは無理なので、とりあえず、よく使われるもののみ取り上げる

タイムスタンプの生成

import pandas as pd

# pandasから直接生成する場合
# 任意の日付/時刻を表すオブジェクトを生成します。
res_01 = pd.Timestamp('1900/1/1 01:01:01.123456')
# タイムスタンプを生成する(date + time)
print(type(res_01))
print(res_01)
# 直接シリアル値への変換は不可(下記はエラーとなる)
# print(str(int(res_01)))
<class 'pandas._libs.tslibs.timestamps.Timestamp'>
1900-01-01 01:01:01.123456

タイムスタンプ(本日は指定する場合)

# タイムスタンプ(本日は指定する場合)
res_02 = pd.Timestamp.today()
print(res_02)

# dateのみ取得
res_03 = pd.Timestamp.today().date()
print(res_03)

# timeのみ取得
res_04 = pd.Timestamp.today().time()
print(res_04)
2023-04-14 11:09:37.108559
2023-04-14
11:09:37.108559

時間をずらす場合

# 時間をずらす場合(3日前)
base_day = pd.Timestamp.today().date() - pd.Timedelta(days=3)
print(base_day)

# 時間をずらす場合(3日後)
base_day = pd.Timestamp.today().date() + pd.Timedelta(days=3)
print(base_day)
2023-04-11
2023-04-17

リスト生成する場合

# リスト生成する場合(月末の日がセットされる)
list_day = pd.date_range('2022/04/01','2023/03/31',freq='M')
print(list_day)
for li in list_day:
    # タイムスタンプ
    print(li)
    # 日付のみ
    print(li.date())
    # 文字列型変換
    print(li.strftime('%Y-%m-%d'))
    break

# リスト生成する場合(月始めの日がセットされる)
list_day = pd.date_range('2022/04/01','2023/03/31',freq='MS')
print(list_day)

※DBへ書き出しする場合、str型またはタイムスタンプ型なのかによってSQL文検索結果が変わる場合があり、気をつける必要!
※DBから読み込みだとobject型であれば、タイムスタンプへの変換が必要(または読み込み時に指定する方法もある)

DatetimeIndex(['2022-04-30', '2022-05-31', '2022-06-30', '2022-07-31',
               '2022-08-31', '2022-09-30', '2022-10-31', '2022-11-30',
               '2022-12-31', '2023-01-31', '2023-02-28', '2023-03-31'],
              dtype='datetime64[ns]', freq='M')
2022-04-30 00:00:00
2022-04-30
2022-04-30
DatetimeIndex(['2022-04-01', '2022-05-01', '2022-06-01', '2022-07-01',
               '2022-08-01', '2022-09-01', '2022-10-01', '2022-11-01',
               '2022-12-01', '2023-01-01', '2023-02-01', '2023-03-01'],
              dtype='datetime64[ns]', freq='MS')
2
1
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
2
1