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

【Python】Pandasで欠落している日付を確認・抽出する方法

時系列データを扱う際、記録されていない日付(欠落している日付)を特定したいケースはよくあります。PythonのPandasライブラリでは、date_range()difference()を組み合わせることで、指定した期間の中から存在しない日付を簡単に抽出できます。

この記事では、車の購入日データを例に、欠落している日付を確認する具体的な手順を解説します。

手順1: 日付データを含む辞書を作成する

まず、日付の記録を含む辞書(リスト形式)を用意します。ここでは「購入日(Date_of_purchase)」を例として使用します。

# リストの辞書
d = {'Car': ['BMW', 'Lexus', 'Audi', 'Mercedes', 'Jaguar', 'Bentley'],
    'Date_of_purchase': ['2020-10-10', '2020-10-12', '2020-10-17', '2020-10-16', '2020-10-19', '2020-10-22']}

手順2: DataFrameを作成し、インデックスに設定する

次に、上記の辞書からDataFrameを作成します。

dataFrame = pd.DataFrame(d)

続いて、「Date_of_purchase」列をインデックスとして設定します。

dataFrame = dataFrame.set_index('Date_of_purchase')

手順3: 文字列をDateTime型に変換する

to_datetime()を使って、文字列形式の日付をDateTimeオブジェクトに変換します。

dataFrame.index = pd.to_datetime(dataFrame.index)

手順4: 期間内の欠落している日付を抽出する

pd.date_range()で開始日から終了日までの全日付を生成し、difference()を使ってDataFrameのインデックスに含まれていない日付(=欠落している日付)を取得します。

k = pd.date_range(start="2020-10-10", end="2020-10-22").difference(dataFrame.index)

完全なサンプルコード

以下が一連の流れをまとめたコード全体です。

import pandas as pd

# リストの辞書
d = {'Car': ['BMW', 'Lexus', 'Audi', 'Mercedes', 'Jaguar', 'Bentley'],
    'Date_of_purchase': ['2020-10-10', '2020-10-12', '2020-10-17', '2020-10-16', '2020-10-19', '2020-10-22']}

# 辞書からDataFrameを作成
dataFrame = pd.DataFrame(d)
print("DataFrame...\n", dataFrame)

# Date_of_purchaseをインデックスに設定
dataFrame = dataFrame.set_index('Date_of_purchase')

# to_datetime()で文字列をDateTime型に変換
dataFrame.index = pd.to_datetime(dataFrame.index)

# 欠落している日付を出力
print("\n指定期間内の残りの日付(欠落分)を表示...")
k = pd.date_range(start="2020-10-10", end="2020-10-22").difference(dataFrame.index)

print(k)

実行結果

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

DataFrame...
         Car   Date_of_purchase
0       BMW          2020-10-10
1      Lexus          2020-10-12
2       Audi          2020-10-17
3   Mercedes          2020-10-16
4     Jaguar          2020-10-19
5    Bentley          2020-10-22

指定期間内の残りの日付(欠落分)を表示...
DatetimeIndex(['2020-10-11', '2020-10-13', '2020-10-14', '2020-10-15',
   '2020-10-18', '2020-10-20', '2020-10-21'],
   dtype='datetime64[ns]', freq=None)

まとめ

Pandasのpd.date_range()difference()を組み合わせれば、時系列データの中で欠落している日付を簡単に特定できます。出力結果から、2020年10月10日〜22日の期間中に「10/11」「10/13」「10/14」「10/15」「10/18」「10/20」「10/21」の7日間が記録されていないことが一目でわかります。データの前処理や品質チェックの際に、ぜひ活用してみてください。

  1. 【Python】Pandas DataFrameからサブセット(列の一部)を選択する方法

    Pandas DataFrameのサブセット選択とは? Pandasでは、DataFrameから必要な列や行だけを取り出す操作を「サブセットの選択」と呼びます。大きなデータセットから目的のデータだけを抽出できれば、分析や前処理の効率が大幅に向上します。 この記事では、CSVファイルを読み込んだDataFrameから、1つの列、および複数の列を選択する基本的な方法を解説します。 使用するCSVファイルの内容 今回使用する「SalesData.csv」は、Microsoft Excelで開くと以下のような内容になっています。 CSVファイルからDataFrameを作成する まず、pd.rea

  2. PythonでPandas DataFrameを棒グラフとして可視化する方法

    データ分析において、PandasのDataFrameを視覚的に表現することは非常に重要です。この記事では、CSVファイルから読み込んだデータをmatplotlibを使って棒グラフ(バーチャート)として表示する方法を解説します。 前提条件:サンプルデータ 今回は以下のような内容のCSVファイル(SalesData.csv)を使用します。 Car Reg_Price 0 BMW 2000 1 Lexus 1500 2 Audi 1500 3 Jaguar 2000 4 Mustang