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

【Pandas入門】Pythonでタイムスタンプを比較する方法をわかりやすく解説

はじめに:Pandasでのタイムスタンプ比較の基本

データ分析の現場では、日付や時刻のデータ(タイムスタンプ)を扱う場面が非常に多くあります。例えば「購入日と整備日の差は何日か」「特定の日付以降のレコードだけを抽出したい」といったケースです。

Pandasでは、インデックス演算子(角括弧 [])を使って列にアクセスし、タイムスタンプ同士を直接比較・差分計算することができます。この記事では、具体的なサンプルコードを通じて、その方法をわかりやすく解説します。

1. ライブラリのインポート

まず、必要なライブラリであるPandasをインポートします。

import pandas as pd

2. サンプル用のDataFrameを作成する

次に、「車種(Car)」「購入日(Date_of_Purchase)」「整備日(Date_of_Service)」の3列を持つDataFrameを作成します。日付データは pd.Timestamp() を使って生成しています。

dataFrame = pd.DataFrame(
    {
        "Car": ["Audi", "Lexus", "Tesla", "Mercedes", "BMW"],

        "Date_of_Purchase": [
            pd.Timestamp("2021-06-10"),
            pd.Timestamp("2021-07-11"),
            pd.Timestamp("2021-06-25"),
            pd.Timestamp("2021-06-29"),
            pd.Timestamp("2021-03-20"),
        ],
        "Date_of_Service": [
            pd.Timestamp("2021-11-10"),
            pd.Timestamp("2021-12-11"),
            pd.Timestamp("2021-11-25"),
            pd.Timestamp("2021-11-29"),
            pd.Timestamp("2021-08-20"),
        ]
    })

3. 特定の行のタイムスタンプを比較する

インデックス演算子 [] を使えば、任意の行のタイムスタンプを取り出して比較できます。以下の例では、1行目と2行目について「購入日」と「整備日」の差分を abs() で絶対値として求めています。

timestamp1_diff = abs(dataFrame['Date_of_Purchase'][0] - dataFrame['Date_of_Service'][0])
timestamp2_diff = abs(dataFrame['Date_of_Purchase'][1] - dataFrame['Date_of_Service'][1])

4. すべてのタイムスタンプを一括で比較する

列全体を指定すれば、すべての行の差分を一度に計算することも可能です。これにより、各行ごとの日数差がSeriesとして返されます。

timestamp_diff = abs(dataFrame['Date_of_Purchase'] - dataFrame['Date_of_Service'])

完全なサンプルコード

ここまでの手順をまとめた完全なコードがこちらです。

import pandas as pd

# 3列のDataFrameを作成
dataFrame = pd.DataFrame(
    {
        "Car": ["Audi", "Lexus", "Tesla", "Mercedes", "BMW"],

        "Date_of_Purchase": [
            pd.Timestamp("2021-06-10"),
            pd.Timestamp("2021-07-11"),
            pd.Timestamp("2021-06-25"),
            pd.Timestamp("2021-06-29"),
            pd.Timestamp("2021-03-20"),
        ],
        "Date_of_Service": [
            pd.Timestamp("2021-11-10"),
            pd.Timestamp("2021-12-11"),
            pd.Timestamp("2021-11-25"),
            pd.Timestamp("2021-11-29"),
            pd.Timestamp("2021-08-20"),
        ]
    })

print("DataFrame...\n", dataFrame)

# 特定の行のタイムスタンプを比較
timestamp1_diff = abs(dataFrame['Date_of_Purchase'][0] - dataFrame['Date_of_Service'][0])
timestamp2_diff = abs(dataFrame['Date_of_Purchase'][1] - dataFrame['Date_of_Service'][1])
print("\n車1の購入日と整備日の差分\n", timestamp1_diff)
print("\n車2の購入日と整備日の差分\n", timestamp2_diff)

# すべての行のタイムスタンプ差分を一括計算
timestamp_diff = abs(dataFrame['Date_of_Purchase'] - dataFrame['Date_of_Service'])
print("\n2つのタイムスタンプの差分:\n", timestamp_diff)

実行結果

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

DataFrame...
         Car  Date_of_Purchase  Date_of_Service
0      Audi        2021-06-10       2021-11-10
1     Lexus        2021-07-11       2021-12-11
2     Tesla        2021-06-25       2021-11-25
3  Mercedes        2021-06-29       2021-11-29
4       BMW        2021-03-20       2021-08-20

車1の購入日と整備日の差分
153 days 00:00:00

車2の購入日と整備日の差分
153 days 00:00:00

2つのタイムスタンプの差分:
0   153 days
1   153 days
2   153 days
3   153 days
4   153 days
dtype: timedelta64[ns]

ポイントまとめ

  • タイムスタンプの比較には、インデックス演算子 [] で列や行にアクセスします。
  • 個別の行を比較する場合は dataFrame['列名'][インデックス] の形式を使用します。
  • 列同士を引き算すると、全行の差分が timedelta64[ns] 型のSeriesとして一括取得できます。
  • abs() を使うことで、日付の前後関係に関係なく絶対的な差分を得られます。

この手法は、納期までの残り日数の計算や、イベント間の期間分析など、さまざまな実務シーンで応用できる便利なテクニックです。ぜひ自分のデータでも試してみてください。

  1. Python・PandasでDataFrameを日数間隔でグループ化する方法を解説

    PandasのDataFrameを日付単位でグループ化するには、groupby()メソッドとpd.Grouper()を組み合わせて使用します。Grouperのkey引数でグループ化の基準となる日付列を指定し、freq引数で間隔(頻度)を設定します。本記事では、車両販売記録のデータを例に、7日間隔でデータをグループ化し、登録価格(Reg_Price)の合計を算出する方法を紹介します。freq引数による日数間隔の指定方法Grouperメソッドのfreqには、日数間隔を表す文字列を指定します。たとえば7Dと設定すると、日付列の最初の日付から最後の日付まで、7日ごとの区切りでデータがグループ化されます

  2. 【Python】PandasでDataFrameを月ごとにグループ化して集計する方法

    Pandasではgroupby()メソッドとpd.Grouper()を組み合わせることで、日付データを持つDataFrameを簡単に月ごとにグループ化できます。本記事では、車の販売記録を例に、月単位でデータをまとめ、登録価格(Reg_Price)の合計を算出する方法を解説します。 サンプルとなるDataFrameを作成する まずは、「Car(車名)」「Date_of_Purchase(購入日)」「Reg_Price(登録価格)」の3つの列を持つDataFrameを用意します。 import pandas as pd # Date_of_Purchase(購入日)列を含むDataFrameを作