2017-11-15 12 views
2

私は、パンダが比較的遅くcsvファイルを読み込むことができる理由の1つは、型を推測する前に列の内容全体をスキャンする必要があることを理解しています非推奨low_memoryオプション、pandas.read_csv)。私の理解は正しいのですか?パンダにデータフレームを読み込む速度を上げる方法

データフレームを格納するための適切なフォーマットとデータ型を明示的に指定するので、pandasは推測する必要はありません(SQLは現在オプションではありません)。

特に任意のオプションthose listed hereから何か?

私のデータフレームは浮動小数点型、整数型、日付型、文字列型、およびY/N型を持っているため、数値のみをサポートするフォーマットはできません。

ありがとうございます!

答えて

2

numpy.genfromtxtdelimiter=',', names=Trueとし、次にnumpy配列でパンダのデータフレームを初期化することもできます。 numpy配列が構造化され、pandasコンストラクタは自動的にフィールド名を設定する必要があります。

これは私の経験ではうまくいきます。

+0

? –

+0

私は数値データ(float64)のみを扱っていましたので、私は確信が持てませんが、パンダへの直接インポートよりも優れていると思います。 – Shayn

1

pandas.read_csvへのコールにカラム名とそのデータ型を指定することで、CSVファイルからのインポート効率を向上させることができます。あなたは、ファイル内の列ヘッダを既存している場合は、おそらく名前を指定する必要はありませんし、ちょうどそれらを使用することができますが、私は、ヘッダーをスキップし、完全を期すために名前を指定したい:大きなサンプルで

import pandas as pd 
import numpy as np 
col_names = ['a', 'b', 'whatever', 'your', 'names', 'are'] 
col_types = {k: np.int32 for k in col_names} # create the type dict 
col_types['a'] = 'object' # can change whichever ones you like 
df = pd.read_csv(fname, 
       header = None, # since we are specifying our own names 
       skiprows=[0], # if you *do* have a header row, skip it 
       names=col_names, 
       dtype=col_types) 

を大部分の列を含むデータセットの場合、pd.read_csvの呼び出しでdtype='object'を指定するよりも約20%高速でした。

1

私はHDF5フォーマットかフェザーフォーマットのいずれかを考えます。両方ともかなり速いです(Featherは速いかもしれませんが、HDF5はより豊富な機能を備えています(例えば、ディスクからインデックスを読み込むなど)。両方とも列タイプを格納するので、推測する必要はありません。dtypes、データをロードするときに、データ型(例えば、文字列を数値または文字列に変換する)をデータ・タイムに変換する必要があります。ここで

いくつかの速度の比較は以下のとおりです。でも、非数値列(文字列、日付、Y/N)のための

関連する問題