python

【python】csv読み込みはndarrayで扱う場合もpandasで読み込もう

はじめに

Pythonにてcsvファイルを読み込んでデータ処理する場合の備忘録です。

データ処理するには主にpandas.dataframeかnumpy.ndarrayで扱うことがありますが、
kerasなど一部のライブラリではnumpy.ndarrayしか受け付けないものがあります。

numpy.ndarrayで扱うのであれば、csvファイル読み込みにnumpy.loadtxtを使うのがシンプルですが、
他の方法として、pandas.read_csvで読み込んだ後にnumpy.ndarrayに変換することもできます。

本記事では、csvファイルの読み込み時の速度おいて、
numpy.loadtxt か pandas.read_csv のどちらを使った方が速いのか検証します。

先に結果を言うと、

「pandas.read_csvで読み込んだ後にnumpy.ndarrayに変換」の方が速いです。

環境とテストデータ

  • Windows 10 Home 64bit
  • CPU Intel Core i5-8250U CPU@ 1.60GHz
  • メモリ 8GB
  • SSD 512GB
  • python 3.6.5

テストデータは1000行1000列の乱数(0~1)で作成して使用します。

テストデータ作成のコード

import numpy as np 
import pandas as pd

#乱数作成
testdata = np.random.rand(1000,1000)    # 0〜1の乱数で 1000x1000 の行列を生成
df = pd.DataFrame(testdata)             #dataframeに変換
df.to_csv('data.csv', index=False)      #csvに保存

↓このようなCSVデータが作成されました。これをテストデータとします。

ちなみに、ファイルサイズは18 MB (19,273,791 バイト)です。

python_csv_data

評価

csv読み込みコード

import time
import numpy as np 
import pandas as pd

file = "data.csv"

#-------------------------
#numpyでcsv読み込み
#-------------------------

start = time.time()
data = np.loadtxt(file,delimiter=",")
process_time = time.time() - start
print('numpyでcsv読み込み時間:{:.3f}s'.format(process_time))

#-------------------------
#pandasでcsv読み込み後にndarray変換
#-------------------------

start = time.time()
df = pd.read_csv(file)
data = df.values
process_time = time.time() - start
print('pandasでcsv読み込み時間:{:.3f}s'.format(process_time))

実行結果

numpyでcsv読み込み時間:0.821s
pandasでcsv読み込み時間:0.375s

pandasにてcsvを読み込む方がnumpyより2倍以上速い結果となりました。

まとめ

扱うデータ形式がpandas.dataframeかnumpy.ndarrayのどちらの場合でも、

pythonで速くcsvファイルを読み込むには、pandas.read_csvを使いましょう、とういうことでした。

メモ

csvファイルが数百MB以上の大きいサイズの場合は、pandas.read_csvではなく、daskライブラリを用いた方が速く読み込むことができます。

この検証は別記事で紹介しようと思います。

-python
-, ,

Copyright© Program as Life , 2020 All Rights Reserved Powered by AFFINGER5.