【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()を使うことで、日付の前後関係に関係なく絶対的な差分を得られます。
この手法は、納期までの残り日数の計算や、イベント間の期間分析など、さまざまな実務シーンで応用できる便利なテクニックです。ぜひ自分のデータでも試してみてください。
-
Python・PandasでDataFrameを日数間隔でグループ化する方法を解説
PandasのDataFrameを日付単位でグループ化するには、groupby()メソッドとpd.Grouper()を組み合わせて使用します。Grouperのkey引数でグループ化の基準となる日付列を指定し、freq引数で間隔(頻度)を設定します。本記事では、車両販売記録のデータを例に、7日間隔でデータをグループ化し、登録価格(Reg_Price)の合計を算出する方法を紹介します。freq引数による日数間隔の指定方法Grouperメソッドのfreqには、日数間隔を表す文字列を指定します。たとえば7Dと設定すると、日付列の最初の日付から最後の日付まで、7日ごとの区切りでデータがグループ化されます
-
【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を作