Pandas TimestampをPeriodに変換:5つの方法とサンプルコード

2024-04-02

pandas.Timestamp.to_period:タイムスタンプを周期に変換する

基本的な使い方

import pandas as pd

# タイムスタンプ型データを作成
ts = pd.Timestamp('2023-03-08 12:34:56')

# 周期型データに変換
period = ts.to_period('M')

# 出力
print(period)

出力:

2023-03

上記のように、to_period 関数には、変換したい周期を指定する引数が必要です。引数には、以下の文字列が使用できます。

  • 'Y':年
  • 'M':月
  • 'D':日
  • 'h':時間
  • 'm':分
  • 's':秒

オプション引数

to_period 関数には、以下のオプション引数があります。

  • freq:デフォルトの周期。省略すると、'M' が使用されます。
  • starting_point:周期の開始点。デフォルトは 'EOM'(月末)です。
  • closed:周期の扱い方。デフォルトは 'left' です。

これらのオプション引数を使って、より細かい制御が可能です。

# 年単位で周期化
period = ts.to_period('Y')

# 月末開始で周期化
period = ts.to_period('M', starting_point='SM')

# 左閉区間で周期化
period = ts.to_period('D', closed='left')

まとめ

pandas.Timestamp.to_period 関数は、タイムスタンプ型データを周期型データに変換する便利な関数です。周期型データを使うことで、時間データをより柔軟に扱えます。

参考資料



pandas.Timestamp.to_period サンプルコード集

基本的な使い方

import pandas as pd

# タイムスタンプ型データを作成
ts = pd.Timestamp('2023-03-08 12:34:56')

# 月単位で周期化
period_m = ts.to_period('M')

# 日単位で周期化
period_d = ts.to_period('D')

# 時間単位で周期化
period_h = ts.to_period('h')

# 出力
print(f"月単位:{period_m}")
print(f"日単位:{period_d}")
print(f"時間単位:{period_h}")
月単位:2023-03
日単位:2023-03-08
時間単位:2023-03-08 12

オプション引数の使用

# 年末開始で年単位で周期化
period_y_eoy = ts.to_period('Y', starting_point='EOM')

# 左閉区間で日単位で周期化
period_d_left = ts.to_period('D', closed='left')

# 出力
print(f"年末開始で年単位:{period_y_eoy}")
print(f"左閉区間で日単位:{period_d_left}")

出力:

年末開始で年単位:2023
左閉区間で日単位:2023-03-08

特殊な周期

# 四半期単位で周期化
period_q = ts.to_period('Q')

# 週単位で周期化
period_w = ts.to_period('W')

# 10日単位で周期化
period_10d = ts.to_period('10D')

# 出力
print(f"四半期単位:{period_q}")
print(f"週単位:{period_w}")
print(f"10日単位:{period_10d}")

出力:

四半期単位:2023Q1
週単位:2023-03-06
10日単位:2023-03-01

時刻を含む周期

# 時間と分を含む周期
period_hm = ts.to_period('h:m')

# 秒を含む周期
period_hms = ts.to_period('h:m:s')

# 出力
print(f"時間と分を含む周期:{period_hm}")
print(f"秒を含む周期:{period_hms}")

出力:

時間と分を含む周期:2023-03-08 12:30
秒を含む周期:2023-03-08 12:34:56

データフレームへの適用

# データフレームを作成
df = pd.DataFrame({'timestamp': [ts, ts + pd.Timedelta(days=1), ts + pd.Timedelta(days=2)]})

# 各行のタイムスタンプを月単位で周期化
df['period_m'] = df['timestamp'].dt.to_period('M')

# 出力
print(df)

出力:

   timestamp  period_m
0 2023-03-08  2023-03
1 2023-03-09  2023-03
2 2023-03-10  2023-03

これらのサンプルコードは、pandas.Timestamp.to_period 関数のさまざまな使い方を理解するのに役立ちます。

参考資料

  • pandas


pandas.Timestamp を Period に変換する他の方法

pd.to_datetime と dt.to_period の組み合わせ

import pandas as pd

# タイムスタンプ型データを作成
ts = pd.Timestamp('2023-03-08 12:34:56')

# datetime 型に変換
dt = pd.to_datetime(ts)

# 周期型データに変換
period = dt.to_period('M')

# 出力
print(period)

出力:

2023-03

この方法は、to_period 関数よりも冗長ですが、より細かく制御できます。例えば、to_datetime 関数でフォーマットを指定して、変換する日時データを明確に指定できます。

pd.Series.dt.floor と dt.asfreq の組み合わせ

# タイムスタンプ型データを含む Series を作成
ts_series = pd.Series([ts, ts + pd.Timedelta(days=1), ts + pd.Timedelta(days=2)])

# 月単位で切り捨て
ts_series_floor = ts_series.dt.floor('M')

# 月単位で周期化
period_series = ts_series_floor.dt.asfreq('M', fill_value='EOM')

# 出力
print(period_series)

出力:

0   2023-03-01
1   2023-04-01
2   2023-05-01

この方法は、Series データに対して周期化を行う場合に便利です。dt.floor 関数で切り捨てを行い、dt.asfreq 関数で周期化を行います。

自作関数

上記の方法以外にも、自作関数を使って Timestamp を Period に変換することもできます。

def to_period(ts, freq):
  """
  Timestamp を Period に変換する関数

  Args:
    ts: Timestamp 型データ
    freq: 周期

  Returns:
    Period 型データ
  """

  dt = pd.to_datetime(ts)
  return dt.floor(freq).asfreq(freq, fill_value='EOM')

# 使用例
ts = pd.Timestamp('2023-03-08 12:34:56')
period = to_period(ts, 'M')

print(period)

出力:

2023-03

自作関数を使う方法は、より複雑な変換を行う場合に便利です。

まとめ

pandas.Timestamp.to_period 関数以外にも、pd.to_datetimedt.to_period の組み合わせ、pd.Series.dt.floordt.asfreq の組み合わせ、自作関数など、さまざまな方法で Timestamp を Period に変換することができます。




pandas Data offsets: CustomBusinessDay.is_year_startの使い方

概要:CustomBusinessDay は、祝日などを除いた営業日ベースの日付オフセットを表すクラスです。is_year_start は、CustomBusinessDay オブジェクトを受け取り、その日付が その年の最初の営業日 かどうかを判定します。 *判定は、以下の条件に基づいて行われます。 日付がその年の1月1日であること 日付がその年の最初の営業日であること



Pandas Data Offsets: MonthBegin.is_quarter_end を活用した四半期分析

pandas. tseries. offsets. MonthBegin. is_quarter_end は、月初めの日付が四半期末かどうかを判定する関数です。四半期とは、1年を4等分した期間です。(1月~3月、4月~6月、7月~9月、10月~12月)


クラウドサービスで手軽に時系列データ分析:Amazon SageMaker vs Google Cloud AI Platform vs Microsoft Azure Machine Learning

pandas. tseries. offsets. BusinessMonthBeginは、月初めの営業日を返すオフセットです。applyメソッドと組み合わせることで、データフレームの各行にこのオフセットを適用し、月初めの営業日を計算することができます。


BusinessHour.is_on_offset を使って効率的にビジネス時間処理

BusinessHour. is_on_offset は、Data Offsets の中でも、ビジネス時間 に関する判定を行う関数です。この関数は、指定された日時が、ビジネス時間かどうかを判断します。BusinessHour. is_on_offset(dt)


Pandas YearEnd オフセット:DatetimeIndex/Series/Resampling との連携

YearEnd オフセットは、年末 に日付を進めるオフセットです。例えば、2023-03-08 に YearEnd オフセットを適用すると、2023-12-31 になります。YearEnd オフセットは、以下のパラメータを受け取ります。n: オフセットの回数 (デフォルトは 1)



PandasのIndexオブジェクト:サイズを取得する5つの方法

pandas. Index. size は、Pandasの Index オブジェクトのサイズを取得するための属性です。これは、DataFrame や Series などのデータ構造で使用される、一意のラベルの集合体です。size 属性は、インデックスに含まれるラベルの数を整数で返します。これは、データ構造の形状やメモリ使用量を把握する際に役立ちます。


Pandas Rolling Windowで時系列データ分析をマスター!

pandas. core. window. rolling. Rolling. apply は、Pandasの "Window" 機能の一つである "Rolling Window" において、任意の関数や処理を各ウィンドウに対して適用する機能を提供します。これは、時系列データ分析において、過去n期間分のデータに基づいて計算を行うような場合に非常に有用です。


Pandasでファイルパス、URL、名前、メールアドレスなどを楽々解析!「pandas.Series.str.rpartition」の実践ガイド

pandas. Series. str. rpartition メソッドは、Series オブジェクト内の文字列を最後の区切り文字で分割し、3つの要素を含むタプルを返します。各要素は以下の通りです。左部分: 区切り文字より前の部分区切り文字: 実際に使用された区切り文字


PandasのMonthEnd.name属性:月単位の時系列データ分析をマスターするための必須アイテム

pandas. tseries. offsets. MonthEnd. name は、パンダライブラリのタイムシリーズモジュールにおける重要な属性です。これは、MonthEnd オフセットオブジェクトの名前を表し、月単位の時系列データ分析において、特定の月の末日を指す際に役立ちます。


マイクロ秒単位で時系列データを操る! pandas.tseries.offsets.Micro.apply の完全解説

時系列データの分析において、マイクロ秒単位の精度で時間軸を操作したい場合マイクロ秒単位のオフセットを持つタイムスタンプを生成したい場合offsets: マイクロ秒単位のオフセットを表す数値またはTimedelta型オブジェクトオフセットが適用されたTimedelta型オブジェクト