【Pandas】DatetimeIndexの書式変換をマスターしよう!strftimeの使い方から応用例まで


pandas.DatetimeIndex.strftime は、pandas ライブラリで利用できる DatetimeIndex オブジェクトを任意の書式に変換する関数です。書式は、標準ライブラリの strftime 関数と同じように指定できます。

使い方

import pandas as pd

# サンプルデータの作成
dates = pd.to_datetime(['2020-01-01', '2020-02-02', '2020-03-03'])
index = pd.DatetimeIndex(dates)

# 書式指定
formatted_index = index.strftime('%Y-%m-%d')

# 結果の表示
print(formatted_index)

上記のコードを実行すると、以下の結果が出力されます。

2020-01-01
2020-02-02
2020-03-03

書式指定文字

strftime 関数で使用できる書式指定文字は以下の通りです。

文字説明
%Y2020
%m01
%d01
%H12
%M00
%S00
%fマイクロ秒000000

これらの文字を組み合わせて、任意の書式を指定できます。

  • 曜日を含めた文字列に変換する
  • 年月のみの文字列に変換する
  • 特定の日付のみを抽出する
  • 書式指定文字の詳細については、標準ライブラリの strftime 関数のドキュメントを参照してください。
  • pandas のバージョンによって、strftime 関数の挙動が異なる場合があります。詳細は公式ドキュメントを参照してください。


特定の日付のみを抽出

import pandas as pd

# サンプルデータの作成
dates = pd.to_datetime(['2020-01-01', '2020-02-02', '2020-03-03', '2020-04-04'])
index = pd.DatetimeIndex(dates)

# 特定の日付のみ抽出
filtered_index = index[index.year == 2020 & index.month == 2]

# 結果の表示
print(filtered_index)
2020-02-02

年月のみの文字列に変換

以下のコードは、DatetimeIndex オブジェクトを年月のみの文字列に変換する例です。

import pandas as pd

# サンプルデータの作成
dates = pd.to_datetime(['2020-01-01', '2020-02-02', '2020-03-03', '2020-04-04'])
index = pd.DatetimeIndex(dates)

# 年月のみの文字列に変換
formatted_index = index.strftime('%Y-%m')

# 結果の表示
print(formatted_index)
2020-01
2020-02
2020-03
2020-04

以下のコードは、DatetimeIndex オブジェクトを曜日を含めた文字列に変換する例です。

import pandas as pd

# サンプルデータの作成
dates = pd.to_datetime(['2020-01-01', '2020-02-02', '2020-03-03', '2020-04-04'])
index = pd.DatetimeIndex(dates)

# 曜日を含めた文字列に変換
formatted_index = index.strftime('%A %Y-%m-%d')

# 結果の表示
print(formatted_index)
Wednesday 2020-01-01
Sunday 2020-02-02
Tuesday 2020-03-03
Wednesday 2020-04-04


dt.strftime メソッド

DatetimeIndex オブジェクトには dt 属性があり、この属性に strftime メソッドを呼び出すことで、pandas.DatetimeIndex.strftime と同様の操作を実行できます。

import pandas as pd

# サンプルデータの作成
dates = pd.to_datetime(['2020-01-01', '2020-02-02', '2020-03-03'])
index = pd.DatetimeIndex(dates)

# 書式指定
formatted_index = index.dt.strftime('%Y-%m-%d')

# 結果の表示
print(formatted_index)

上記のコードは、pandas.DatetimeIndex.strftime を使用した場合と同様の結果を出力します。

map 関数

map 関数を使用して、lambda 式で書式変換を行う方法もあります。

import pandas as pd

# サンプルデータの作成
dates = pd.to_datetime(['2020-01-01', '2020-02-02', '2020-03-03'])
index = pd.DatetimeIndex(dates)

# 書式指定
formatted_index = index.map(lambda x: x.strftime('%Y-%m-%d'))

# 結果の表示
print(formatted_index)

フォーマット済み文字列の生成

strftime 関数を使用して、個別にフォーマット済み文字列を生成し、それを新しい列に追加する方法もあります。

import pandas as pd

# サンプルデータの作成
dates = pd.to_datetime(['2020-01-01', '2020-02-02', '2020-03-03'])
index = pd.DatetimeIndex(dates)

# フォーマット済み文字列の生成
formatted_strings = [x.strftime('%Y-%m-%d') for x in index]

# 新しい列の追加
df = pd.DataFrame({'dates': dates, 'formatted_dates': formatted_strings})

# 結果の表示
print(df)

上記のコードは、DatetimeIndex オブジェクトを直接変換するわけではないですが、同様の結果を取得できます。

それぞれの方法の利点と欠点

  • フォーマット済み文字列の生成: 処理速度が速く、メモリ使用量も少ない。ただし、コードが煩雑になる場合がある。
  • map 関数: 柔軟性が高く、複雑な書式指定にも対応できる。ただし、コードが冗長になる場合がある。
  • dt.strftime メソッド: pandas.DatetimeIndex.strftime とほぼ同じ使い方ができ、コードが簡潔になる。ただし、パフォーマンスが若干劣る場合がある。

状況に応じて適切な方法を選択

上記のように、pandas.DatetimeIndex.strftime にはいくつかの代替方法が存在します。それぞれの方法の利点と欠点を理解し、状況に応じて適切な方法を選択することが重要です。