2016-09-30 10 views
0

私はテキストファイルを別名形式で持っています。私はまた、各行から関連する列を抽出するパーサを持っています。一度に1行ずつファイルを読み込み、データフレームに追加したいと思います。ファイルを解析してデータフレームを作成する方法

問題は、データフレームに行を追加するのが遅いことです。

これを行う正しい方法は何ですか?

+0

?ファイルが大きい場合は、エントリを1つずつ追加しても、そのコードをディスクから読み込む時間に制限される可能性が高いと思いますか? –

+0

@eleanora、テキストファイルのサンプルをまったく同じ形式で投稿することをお勧めします。通常、単一の行をデータフレームに追加するのは非常に遅いです。 – MaxU

答えて

1

ファイルが大きい場合、コードはディスクからファイルを読み込む時間によってバインドされますが、データフレームに行を追加する時間ではありません。たとえば、SSD(読み取りスループット〜400MB/s)では、4GBファイルはディスクからロードするのに10秒かかります。 HDD(〜40MB/s)では、これは100秒までになる可能性があります。この場合、読み込みを高速化する方法の1つは、ファイルをpandasでサポートされているフォーマットに変換して圧縮し、ランタイムデcompressionオプションread_table()を使用して、データフレームの作成中に即座に圧縮解除することです。

  1. 変更データ:あなたが確信している場合

    それ以外の場合、これは本当に問題ではありません追加すること一つ一つがOKではないと、ファイルがメモリにバッファリングするためには大きすぎる場合、あなたは、これらのオプションを持っていますPandasでサポートされているものと一致するフォーマット。例えばCSVファイルはかなり標準的なオプションのように見えるかもしれません。

  2. より大きいバッチ(1〜10K行など)でデータフレームを作成し、一定量のメモリを使用しながら、エントリを1つずつ追加するよりも高速なデータフレームを作成するには、以下のいずれかのコンストラクタを使用します。あなたにファイルを抽出するデータ構造から

The other ways to construct a dataframe:タプルから

DataFrame.from_recordsコンストラクタ、またシリーズのdicts、配列、またはdicts

から 配列

DataFrame.from_dictを記録DataFrame.from_itemsからのシーケンス(キー、値)のペア

あなたがデータフレームに追加すると低速であると言うことになり何

pandas.read_csvpandas.read_tablepandas.read_clipboard

+0

ありがとうございます。それらのいずれかを使用すると、入力行の個々の行を1行ずつ解析する関数を使用できますか?ファイル全体をメモリに読み込んで解析し、そこからデータフレームを作成したいのですが、それは非常に大きなものです。 – eleanora

+0

@eleanora nope;どのくらい大きいですか? –

+0

約10億行。 – eleanora

関連する問題