Python
 Computer >> コンピューター >  >> プログラミング >> Python

【Python・Pandas】daysinmonthでPeriodオブジェクトが属する月の日数を取得する方法

Pandasでは、period.daysinmonth プロパティを使うことで、Periodオブジェクトが該当する月の合計日数を簡単に取得できます。うるう年や月ごとの日数の違いを意識せずに済むため、日付データを扱う際に非常に便利な機能です。

必要なライブラリのインポート

まず、pandasをインポートします。

import pandas as pd

Periodオブジェクトの作成

pandas.Periodは、ある期間を表すオブジェクトです。ここでは、2つのPeriodオブジェクトを作成してみましょう。

period1 = pd.Period("2020-09-23")
period2 = pd.Period(freq="D", year=2021, month=2, day=14, hour=2, minute=35)

period1は文字列から直接生成し、period2は頻度(freq)や年・月・日などの個別の引数を指定して生成しています。

Periodオブジェクトの表示

作成したPeriodオブジェクトの中身を確認します。

print("Period1...\n", period1)
print("Period2...\n", period2)

月の日数を取得する

daysinmonthプロパティを使って、それぞれのPeriodオブジェクトが属する月の日数を取得します。

res1 = period1.daysinmonth
res2 = period2.daysinmonth

完全なサンプルコード

以下が、ここまでの手順をまとめたコード全体です。

import pandas as pd

# pandas.Periodは期間を表すオブジェクト
# 2つのPeriodオブジェクトを作成
period1 = pd.Period("2020-09-23")
period2 = pd.Period(freq="D", year=2021, month=2, day=14, hour=2, minute=35)

# Periodオブジェクトを表示
print("Period1...\n", period1)
print("Period2...\n", period2)

# 各Periodオブジェクトが属する月の日数を取得
res1 = period1.daysinmonth
res2 = period2.daysinmonth

# 結果を出力
print("\n1つ目のPeriodオブジェクトの月の日数 ...\n", res1)
print("\n2つ目のPeriodオブジェクトの月の日数 ...\n", res2)

実行結果

上記のコードを実行すると、次のような出力が得られます。

Period1...
2020-09-23
Period2...
2021-02-14

1つ目のPeriodオブジェクトの月の日数 ...
30

2つ目のPeriodオブジェクトの月の日数 ...
28

解説

period1は「2020年9月23日」を表しているため、9月の日数である30が返されます。一方、period2は「2021年2月14日」を表しており、2021年はうるう年ではないため、2月の日数として28が返されます。

このようにdaysinmonthプロパティを利用すれば、カレンダーを意識することなく、自動的に正しい月の日数を取得できます。月末処理や期間計算など、日付関連のロジックを実装する際にぜひ活用してください。

  1. Pythonで指定した月の日数を求める方法(うるう年対応)

    はじめにある年 Y と月 M が与えられたとき、その年・月に含まれる日数を返すプログラムを考えてみましょう。たとえば Y = 1992、M = 7 の場合は 31 日、Y = 2020、M = 2 の場合は 2020 年がうるう年であるため 29 日となります。解き方の手順この問題は、次のステップで解決できます。月が 2 月(m = 2)の場合:その年がうるう年であれば 29 を返し、そうでなければ 28 を返す[1, 3, 5, 7, 8, 10, 12] という要素を持つ配列(31 日ある月のリスト)を作成するm がこのリストに含まれていれば 31 を返し、それ以外の場合は 30 を返すう

  2. Pythonで指定範囲内のうるう日の合計数を取得する方法

    Pythonの標準ライブラリ「calendar」には、指定した範囲内の年に含まれるうるう日の合計数を求めるための専用関数が用意されています。それが calendar.leapdays(y1, y2) です。この関数は、範囲 [y1, y2) 内の年に含まれるうるう日の総数を返します。つまり、開始年 y1 は範囲に含まれますが、終了年 y2 自体は含まれない点に注意してください。うるう日は、4で割り切れる年(ただし100で割り切れかつ400で割り切れない年を除く)に発生します。使用例以下の例では、1995年から2018年までの範囲内のうるう日の合計数を取得しています。import calenda