【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
関数で使用できる書式指定文字は以下の通りです。
文字 | 説明 | 例 |
---|---|---|
%Y | 年 | 2020 |
%m | 月 | 01 |
%d | 日 | 01 |
%H | 時 | 12 |
%M | 分 | 00 |
%S | 秒 | 00 |
%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
にはいくつかの代替方法が存在します。それぞれの方法の利点と欠点を理解し、状況に応じて適切な方法を選択することが重要です。