案件で以下のようなcsvファイルの欠損した日付部分を補完する必要があったので、その方法をメモしておきます
日付データの欠損を埋めるサンプルコード
まずは欠損した日付データを作成します
import pandas as pd df = pd.DataFrame(pd.date_range(start='1/1/2017', end='2/1/2017', freq='D'), columns=['date']) df['data'] = 1 df = df.sample(n=10).sort_values('date') print(df.info()) print('-------------------------------------') df.head(10)
<実行結果>
こんな感じの日付が飛び飛びのデータフレームを作ります、データ型も確認していてDtypesで表示されている日付の列のデータ型がdatetime64であることが必須です。もしほかのCSVから読み込んだデータなどでこれを行う場合は日付列のデータ型がdatetimeであることを確認してください
そして日付データの欠損を埋める流れとしては、以下のフローになります。
①時刻のカラム(datetime型)をindexに指定
② pandasのasfreq関数を使用
③indexを元に戻す
import pandas as pd import datetime df_ = df.set_index('date') # 列名「date」をデータフレームのindexに指定 df_ = df_.asfreq(freq='1D') df_fill = df_.reset_index() # indexを元に戻す print(df_fill)
<実行結果>
欠損している日付が保管され、その部分のdata列は欠損値NANが代入されています。
以上のように間が空いてしまった日時データを埋めることができます。
なお、asfreq関数のfreqに指定できる引数は今回は1日単位としていますが、5分おきなどもう少し細かく調整できたりします。詳しくは下記の公式リファレンスに載っています。
Time series / date functionality — pandas 2.2.0 documentation
関連記事:【Python】pandasのresample()で株価データを月/日/時ごとに再集計
では~
コメント
[…] 関連記事:【Python】pandasで日付データの欠損を補完するサンプルコード […]
[…] 関連記事:【Python】pandasで日付データの欠損を補完するサンプルコード […]