![見出し画像](https://assets.st-note.com/production/uploads/images/115566457/rectangle_large_type_2_785c73dd1e315e230082a5b6213a75e0.png?width=1200)
ブックマーク必須!Pandas・datetimeで行う時系列データ処理大全
こんにちは、コグラフ株式会社データアナリティクス事業部の平松です。
今回は時系列データの処理方法についてまとめました。
時系列データ分析の前処理に必須の情報が盛りだくさんです!
是非、ご一読ください。
pandas、datetimeについての説明
時系列データ処理で使うライブラリ、モジュールはPandas、datetimeです。
目的によりますが、基本的な時系列処理はこれらで十分可能だと思います。
Pandasで使うメソッドはpd.to_datetimeです。
目的別処理内容
まず必要なライブラリ、モジュールを準備します。
import pandas as pd
import datetime
現在の年月日、時間の出力
now = datetime.datetime.now()
now
![](https://assets.st-note.com/img/1694059615529-rYECc51n0U.png)
now()は現在の年からマイクロ秒まで出力してくれます。
datetime.now()で取得可能。datetime型が返ってきます。
年、月、日にち、時間、分の出力
print(now.year)
print(now.month)
print(now.day)
print(now.time())
print(now.minute)
print(type(now.time()))
![](https://assets.st-note.com/img/1694059963691-lX1GhlZQ46.png)
now()と同様の要領で、yearのメソッドを入れると年のみが返ってきます。
monthだと月という感じです。
time()は時間、分、秒、マイクロ秒までが出力されます。
現在と指定した日付との差を取得
delta = datetime.datetime.now() - datetime.datetime(2013, 9, 6)
print(delta)
print(type(delta))
![](https://assets.st-note.com/img/1694060122692-7VfRHGBsEA.png)
datetimeからdatetimeの引き算をすると、出力結果はtimedeltaになります。
1日前の日にち、時間の出力
start = datetime.datetime.now()
end = start + datetime.timedelta(days=-1)
print(end)
print(type(end))
![](https://assets.st-note.com/img/1694060264056-l3EiYlvL5h.png)
timedeltaは引数にdays以外に、(days=0, seconds=0, microseconds=0, milliseconds=0, minutes=0, hours=0, weeks=0)などをとれます。
時間のデータフレームの作成
df = pd.DataFrame({'year': [2022, 2023],
'month': [8, 9],
'day': [6, 7]})
pd.to_datetime(df)
![](https://assets.st-note.com/img/1694060430895-xaYYoIgYbB.png)
出力結果はしっかりとdatetime型になっています。
str型→timestamp型
time = '2020/01/01'
print(type(time))
pd.to_datetime(time)
time = '20200101'
print(type(time))
pd.to_datetime(time)
![](https://assets.st-note.com/img/1694060570335-EHk67NKpcb.png)
上記の形で時間が格納されている場合、timestamp型にすることが可能です。
int型→datetime型
time = pd.Series([20200101, 20210101, 20220101])
convert_time = pd.to_datetime(time, format='%Y%m%d')
convert_time
![](https://assets.st-note.com/img/1694060694387-kVFVPW1Ef1.png)
int型、str型→timestamp型にして引き算
time = pd.Series([20200101, 20210101, 20220101])
time2 = pd.Series(["2016年01月01日 05時25分", "2018年01月01日 05時25分", "2020年01月01日 05時25分"])
convert_time = (pd.to_datetime(time2, format='%Y年%m月%d日 %H時%M分').dt.date
- pd.to_datetime(time, format='%Y%m%d').dt.date)
convert_time
![](https://assets.st-note.com/img/1694060754086-hBFFH6ETl5.png)
timestamp型、datetime型→str型
strfttime()は時刻をstr型にして取得するメソッドです。
引数に形を指定すると取得できます。
now.strftime('%Y.%m.%d, %H:%M:%S')
![](https://assets.st-note.com/img/1694060876867-1wbSwRF7lS.png)
now.strftime('%A, %B, %d, %Y')
![](https://assets.st-note.com/img/1694060935062-oe1283vral.png)
now.strftime('%Y年%m月%d日')
![](https://assets.st-note.com/img/1694060967896-lVAR8x7ZBY.png)
datetime.datetime.strptime("1991-11-05", "%Y-%m-%d")
![](https://assets.st-note.com/img/1694062542708-UOfwIIcvYl.png)
返される型の確認
few_days = now + datetime.timedelta(days=5)
print(type(few_days))
d_few_days = pd.to_datetime(few_days)
print(type(d_few_days))
![](https://assets.st-note.com/img/1694061855555-bseMtiQmRg.png)
nowはdatetimeモジュールのメソッドです。
したがって、few_daysはdatetime型になります。
pandasのto_datetime()メソッドは、timestamp型を返すので、d_few_daysはtimestamp型になります。
しかし、datetime型とtimestamp型での四則演算は可能なので、あまり気にしなくても問題ありません。
インターバルの計算
df = pd.read_csv("C:\\CSV\\AirPassengers.csv", index_col='Month', parse_dates=True)
df = df.reset_index()
df['Month'] = pd.to_datetime(df['Month'])
df['shift_month'] = df['Month'].shift(1)
df['delta_month'] = df['Month'] - df['shift_month']
df
![](https://assets.st-note.com/img/1694062376388-QOYHsAARVH.png)
shift()は行をずらす関数です。引数にが正の整数の場合、下方向に、とった引数分ずらします。負の整数だった場合、上方向に、とった引数ぶんずらします。
上記の例では引数は1なので、df['Month']を下方向へ一行ずらします。
df['Month']はto_datetime()によってtimestamp型にしたので引き算が可能です。
その出力結果がdf[delta_month]になります。
月単位に丸める
delta_month = pd.to_datetime(df['Month']).dt.month - pd.to_datetime('2000-02-01').month
delta_month
![](https://assets.st-note.com/img/1694062366447-SuBTEzACzm.png)
dt.monthでdf['Month']を月までの表示に丸めることが可能です。
また月までの表示に丸めた状態で引き算をすると、この場合、返される値はintになります。
dtはdatetimeの略で、dtを付けずにmonthを付けるとエラーになります。
また、yearやdateなども可能です。
データ分析に興味のある方募集中!
コグラフ株式会社データアナリティクス事業部ではPythonやSQLの研修を行った後、実務に着手します。
研修内容の充実はもちろん、経験者に相談できる環境が備わっています。
このようにコグラフの研修には、実務を想定し着実にスキルアップを目指す環境があります。
興味がある方は、下記リンクよりお問い合わせください。
Twitterもやってます!
コグラフデータ事業部ではTwitterでも情報を発信しています。
データ分析に興味がある、データアナリストになりたい人など、ぜひフォローお願いします!
📢Wantedly新掲載!
— アラリコ@コグラフ株式会社 | データ事業部 (@CographData) July 14, 2023
「データに興味がある」
「データに携わる仕事がしたい」
そこのあなた!
私たちと一緒にデータ分析しませんか?
IT業界未経験の方も大歓迎です☺️#エンジニア転職 #データ分析 #駆け出しエンジニアと繋がりたいhttps://t.co/S9o7VSjGRt
この記事が気に入ったらサポートをしてみませんか?