概要
以下のようなCSVファイル内のデータにタイムスタンプ列が存在していて、pandasのread_csvで読み込む際にタイムスタンプ列をdatetime型として読み込ませる。時系列データとして操作したい場合に役立つ。
# ファイルの中身を確認。
# headコマンドで5行まで抽出
! head date.csv -n 5
"""
,Value
2021-12-01,0
2021-12-02,1
2021-12-03,2
2021-12-04,3
"""
実行環境 |
---|
Windows Subsystem for Linux |
Python 3.6.9 |
pip 9.0.1 |
jupyter notebook |
使用ライブラリ | ライセンス |
---|---|
pandas==1.0.0 | BSD |
カレントディレクトリにあるCSVファイルの中身を確認。
# ファイルの中身を確認。
# headコマンドで5行まで抽出
! head date.csv -n 5
"""
,Value
2021-12-01,0
2021-12-02,1
2021-12-03,2
2021-12-04,3
"""
どうやら最初の1列目に日付データ、2列目にその日の要素が記録されている。
まずは普通に読み込んでみるが、日付の入った1列目のデータをインデックスとしたいので、read_csvの引数index_colでインデックス番号0を指定しインデックスとして保管する。
import pandas as pd
df = pd.read_csv('date.csv', index_col=0)
df.head()
"""
Value
2021-12-01 0
2021-12-02 1
2021-12-03 2
2021-12-04 3
2021-12-05 4
"""
インデックスの詳細を見てみると、dtypeはobject(文字列)となっている。
print(df.index.dtype)
"""
object
"""
インデックスの型をdatetime型に変換すには以下の方法がある。
df.index = df.index.astype('datetime64[ns]')
# or
df.index = pd.to_datetime(df.index)
print(df.index.dtype)
"""
datetime64[ns]
"""
このようにすればpandasで時系列データとして扱えるようになる。
df.plot(figsize=(10, 5), marker='o')
# ファイルの中身を確認
!head date.csv -n 5
"""
,Value
2021-12-01,0
2021-12-02,1
2021-12-03,2
2021-12-04,3
"""
read_csvの引数index_col=0とした時、parse_dates=Trueを設定すると0番目の列はdatetime型として変換され読み込まれます。
※index_colの0はインデックス番号0番目の日付の入った列を指定している。index_col=1ならば2列目のValueがインデックスと置き換わる。
df_dt = pd.read_csv('date.csv', index_col=0, parse_dates=True)
df_dt.head()
"""
Value
2021-12-01 0
2021-12-02 1
2021-12-03 2
2021-12-04 3
2021-12-05 4
"""
print(df_dt.index.dtype)
"""
datetime64[ns]
"""
index_colを設定していない場合は、リスト形式でインデックス番号か列名をparse_datesに渡すと変換できる
※Unnamed: 0は列名が無名だった場合に付けられる
df_dt = pd.read_csv('date.csv', parse_dates=[0])
# or
df_dt = pd.read_csv('date.csv', parse_dates=['Unnamed: 0'])
df_dt.head()
"""
Unnamed: 0 Value
0 2021-12-01 0
1 2021-12-02 1
2 2021-12-03 2
3 2021-12-04 3
4 2021-12-05 4
"""
print(df_dt['Unnamed: 0'].dtype)
"""
datetime64[ns]
"""
列名「Unnamed: 0」から「Date」に変更した列をset_indexを利用して整える。
df_dt = df_dt.rename(columns={'Unnamed: 0': 'Date'}).set_index('Date')
df_dt.head()
"""
Value
Date
2021-12-01 0
2021-12-02 1
2021-12-03 2
2021-12-04 3
2021-12-05 4
"""
print(df_dt.index.dtype)
"""
datetime64[ns]
"""
以上、ご覧いただきありがとうございました。