Help us understand the problem. What is going on with this article?

不連続の時系列データに対して、直前の値を補間して連続データに変換

More than 1 year has passed since last update.

後輩に向けて不連続の時系列データに対して、直前の値を補間して連続データに直す手順例

Step1 1秒ごとのtimestampをindexにもつdataframeを作る

まずは時間の配列を作成する。

import datetime
import pandas as pd
import numpy as np

# 初期時間
d = datetime.date(2018, 1, 1)
t = datetime.time(0, 0)
base = datetime.datetime.combine(d, t)

# 追加したい秒数
num_sec = 100*60*60 #100日*60分*60秒
datetimes = [base + datetime.timedelta(seconds=x) for x in range(0, num_sec)]

dfという名前で新しい空のdataframeを作成

df = pd.DataFrame(index=datetimes)

dfの中身はこんな感じでindexとして日時だけが入っている。

2018-01-01 00:00:00
2018-01-01 00:00:01
2018-01-01 00:00:02
2018-01-01 00:00:03
2018-01-01 00:00:04

Step2 ダミーデータの作成

ダミーの生データを作る。(今回の趣旨では重要じゃない)

dummy_type = [0, 1, 256] 

#ランダムに数値を振り分け
_arr = np.random.choice(dummy_type, num_sec) 

_df = pd.DataFrame(index=datetimes)
_df['A'] = _arr

こんな感じのデータフレームができた。

A
2018-01-01 00:00:00 0
2018-01-01 00:00:01 256
2018-01-01 00:00:02 256
2018-01-01 00:00:03 1
2018-01-01 00:00:04 1
raw_df = _df[_df['A'] != 256]
A
2018-01-01 00:00:00 0
2018-01-01 00:00:03 1
2018-01-01 00:00:04 1
2018-01-01 00:00:05 0
2018-01-01 00:00:07 1

256をもつ行が消えた!ので行がないところは前の値と同じデータとみなすダミーデータが完成!

Step3 dfにraw_dfを入れて、時間が飛んでいるところは直前の値で補間する

空のデータフレームdfと生データのデータフレームraw_dfをくっつける。

df=pd.concat([df, raw_df], axis=1)
A
2018-01-01 00:00:00 0.0
2018-01-01 00:00:01 NaN
2018-01-01 00:00:02 NaN
2018-01-01 00:00:03 1.0
2018-01-01 00:00:04 1.0
2018-01-01 00:00:05 0.0
2018-01-01 00:00:06 NaN
2018-01-01 00:00:07 1.0
2018-01-01 00:00:08 NaN
2018-01-01 00:00:09 1.0

NaNのところがデータのない時間なので、直前の値を補間する。

df = df.ffill()
A
2018-01-01 00:00:00 0.0
2018-01-01 00:00:01 0.0
2018-01-01 00:00:02 0.0
2018-01-01 00:00:03 1.0
2018-01-01 00:00:04 1.0
2018-01-01 00:00:05 0.0
2018-01-01 00:00:06 0.0
2018-01-01 00:00:07 1.0
2018-01-01 00:00:08 1.0
2018-01-01 00:00:09 1.0

直前の値で補間されたデータの完成。ぱちぱち。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away