Pandasのread_csv使い方!~multiindex、datetime型index

Pandasのread_csv使い方!~multiindex、datetime型index

Pandasread_csvでcsvファイルを読み込む方法まとめ。indexDateTimeが変換できなくて苦戦したのでメモ。

まえがき

 以下のようなcsvファイルを日付型indexを持つDataFramedf)として読み込もうとしました。
しかし、indexの日付変換が出来ませんでした。
その際、以下の点が課題となったので、通常のcsvファイルの読み込み方法と合わせてメモしておきたいと思います。

  • 列に名前がついていない。
  • 日付の区切り文字が”.”になっている。
  • 日付と時刻が別の列に分かれている。

環境はPython3.8JupyterNoteBook6.3.0です。

やりかた

 pandasAPIread_csvを使います。
read_csvとは、その名の通りcsvファイルを読み込み、pandas.DataFrame型の変数に格納するものです。
詳細は以下、公式リファレンスをご覧ください。

https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html?highlight=read_csv

単純に読み込む ~read_csv(filepath)

 read_csvの引数filepathに、読み込むcsvファイルの名前を指定します。

df = pd.read_csv(filePath)

先頭行が列名になり、行番号がindexなっています。また、日付列の書式はこの時点ではObject型です。

列名を付ける ~name = {A,B,…}

 read_csvの引数nameに列名を指定します。
列名はArray形式で登録し、左から順に1列目の名称、2列目の名称、・・・というように順に指定してゆきます。

df = pd.read_csv(filePath,
                 names = ['Date','Time','Open','High','Low','Close','Volume'])

分かりやすい列名を付けることができましたが、indexは行番号のままです。

indexにする列を指定する ~index_col = {A,B,…}~

 read_csvの引数index_colに列名を指定します。
配列形式で複数列を指定することで、multiindex化することも可能です。

df = pd.read_csv(filePath,
                 names = ['Date','Time','Open','High','Low','Close','Volume'],
                 index_col = 'Date')

Date“列をindexにすることができましたが、この時点でのindexのデータ型はObject型です。

indexを日付変換する ~parse_dates = true

 read_csvの引数parsedatesTrueにします。
Pandasが読み込める日付形式で書かれた列を日付型に変換します。
Pandasが読み込める日付形式は以下をご覧ください。

https://docs.python.org/3/library/datetime.html#strftime-and-strptime-behavior

df = pd.read_csv(filePath,
                 names = ['Date','Time','Open','High','Low','Close','Volume'],
                 index_col = 'Date',
                 parse_dates = True)

少しわかりにくいですが、”Date“列の区切り文字が”.“から、”“に変化しており、日付型への変換に成功しています。

複数列をindexに指定する ~multiindex~ 

 multiindexという引数はありません。しかし、index_colに配列で複数の列名を指定することで、multiindexを作ることができます。

df = pd.read_csv(target,
                names = ['Date','Time','Open','High','Low','Close','Volume'],
                index_col = ['Date','Time'],
                parse_dates = True)

Date“と”Time“両方の列をmultiindex化して、Datetime型に変換することができました。
しかし、時刻が入力されていた”Time“列に日付が入力されています。

複数列を一つのindexにまとめて日付変換する

 最後に、目的のcsvファイルを読み込んだ方法をご紹介します。ただ、いろいろ試してみた結果随分長くなってしまったので、ページを分けて詳細に解説することにしました。以下のページで解説しています。

https://tedukapm.tech/?p=39

まとめ

 read_csvを使ってcsvファイルを読み込む方法を学びました。
とはいえ、まだ、Date列とTime列を結合する必要があるので、次回挑戦したいと思います。
 ちなみに、この日付の形式はFXのヒストリカルデータの形式です。
将来的には為替相場の未来予測をやってみたいと思っていますので、引き続き勉強していきたいと思います。