【保存版】Pandasで年末かどうかを瞬時に判定!「pandas.Timestamp.is_year_end」のしくみとサンプルコード集
Pandasライブラリは、データ分析における作業を効率化するための強力なツールです。pandas.Timestamp
オブジェクトは、日付と時刻情報を扱う際に非常に役立ちます。pandas.Timestamp.is_year_end
メソッドは、その名の通り、指定された日付が年末であるかどうかを判定します。
詳細解説
pandas.Timestamp.is_year_end
メソッドは、引数としてTimestamp
オブジェクトを受け取り、それが年末であるかどうかをTrue
またはFalse
で返します。年末とは、12月31日を指します。
例
import pandas as pd
# 2023年12月31日を作成
dt = pd.Timestamp('2023-12-31')
# 判定
is_year_end = dt.is_year_end()
print(is_year_end) # True
# 2024年1月1日を作成
dt = pd.Timestamp('2024-01-01')
# 判定
is_year_end = dt.is_year_end()
print(is_year_end) # False
応用例
pandas.Timestamp.is_year_end
メソッドは、年末処理が必要なデータ分析タスクに役立ちます。例えば、以下の用途で使用できます。
- 年間データの集計
- 年末キャンペーンの開始/終了判定
- 年末調整のためのデータ抽出
- 年末の売上分析
- 引数として
Series
やDataFrame
を受け取ることもできます。その場合、それぞれの要素に対して個別に判定が行われます。 - リープイヤー(閏年)の場合も、12月31日を年末と判定します。
pandas.Timestamp.is_year_end
メソッドは、年末判定を簡単に行える便利なツールです。データ分析タスクを効率化するために、ぜひ活用してみてください。
- Pandasの
Timestamp
オブジェクトに関する他の属性やメソッドについても、公式ドキュメントを参照してください。
import pandas as pd
# データ作成
data = {
'日付': pd.to_datetime(['2023-12-25', '2023-12-30', '2023-12-31', '2024-01-03']),
'売上': [100, 200, 350, 50]
}
df = pd.DataFrame(data)
# 年末判定
df['年末判定'] = df['日付'].dt.is_year_end()
# 年末の売上
年末売上 = df[df['年末判定'] == True]['売上'].sum()
print(f"年末の売上: {年末売上}")
年末調整データ抽出
import pandas as pd
# データ作成
data = {
'社員名': ['田中', '佐藤', '鈴木'],
'給与': [1000000, 800000, 700000],
'賞与': [500000, 300000, 200000],
'支払日': pd.to_datetime(['2023-12-25', '2023-12-31', '2024-01-10'])
}
df = pd.DataFrame(data)
# 年末調整対象データ抽出
年末調整対象 = df[df['支払日'].dt.is_year_end()]
print(f"年末調整対象データ:")
print(年末調整対象)
年末キャンペーン判定
import pandas as pd
# データ作成
data = {
'キャンペーン名': ['年末セール', '冬物セール', '新春セール'],
'開始日': pd.to_datetime(['2023-12-20', '2023-12-01', '2024-01-05']),
'終了日': pd.to_datetime(['2024-01-03', '2024-02-29', '2024-01-15'])
}
df = pd.DataFrame(data)
# 現在の日付
today = pd.Timestamp('2024-06-14')
# 実施中のキャンペーン判定
実施中キャンペーン = df[(today >= df['開始日']) & (today <= df['終了日'])]
print(f"実施中のキャンペーン:")
print(実施中キャンペーン)
import pandas as pd
# データ作成
data = {
'日付': pd.to_datetime(['2023-01-01', '2023-02-01', '2023-03-01', '2023-12-01', '2024-01-01']),
'売上': [100, 200, 300, 400, 500]
}
df = pd.DataFrame(data)
# 年間売上集計
年間売上 = df.resample('Y')['売上'].sum()
print(f"年間売上:")
print(年間売上)
月と日を比較
最もシンプルな代替方法は、month
属性とday
属性を比較する方法です。
import pandas as pd
# 判定
dt = pd.Timestamp('2023-12-31')
is_year_end = (dt.month == 12) & (dt.day == 31)
print(is_year_end) # True
strftime関数を使用
strftime
関数を使用して、フォーマット文字列%m%d
で日付を文字列に変換し、比較する方法もあります。
import pandas as pd
# 判定
dt = pd.Timestamp('2023-12-31')
is_year_end = (dt.strftime('%m%d') == '1231')
print(is_year_end) # True
カスタム関数を使用
より複雑な判定が必要な場合は、カスタム関数を作成することもできます。
import pandas as pd
def is_year_end(dt):
"""
指定された日付が年末かどうかを判定する関数
Args:
dt (pandas.Timestamp): 判定対象の日付
Returns:
bool: 年末である場合はTrue、そうでなければFalse
"""
return (dt.month == 12) & (dt.day == 31)
# 判定
dt = pd.Timestamp('2023-12-31')
is_year_end = is_year_end(dt)
print(is_year_end) # True
NumPyを使用した判定
NumPyライブラリを使用すれば、より高速な判定が可能になります。
import pandas as pd
import numpy as np
# 判定
dt = pd.Timestamp('2023-12-31')
is_year_end = np.logical_and(dt.month == 12, dt.day == 31)
print(is_year_end) # True
選択のポイント
どの代替方法を選択するかは、状況によって異なります。
- 可読性: 状況に合わせて、最も分かりやすい方法を選択しましょう。
- 柔軟性: カスタム関数を使用すれば、より複雑な判定が可能になります。
- 処理速度: NumPyを使用した判定が最も高速です。
- シンプルさ: 月と日を比較する方法が最もシンプルです。
- 上記はあくまでも代替方法の一例です。状況に合わせて、自由に選択してください。