2016-08-24 9 views
1

pandas.read_csv関数のオプションがある場合、元のcsvファイルから特定の行のリストのみを読み込むことができるかどうかを知りたいと思います。Pandaを使用して行のリストのみを読み込むread_csv関数 - Python

csvファイルは非常に大きく、メモリ不足のためファイル全体が読み込まれません。
のようなオプションがあります。たとえばlist_to_read = [0,2,10]

df = pandas.read_csv(file, <b>'read_only'</b> = list_to_read) ? 

(これが唯一の行0、行2と行10を読み取ります)

事前

+0

のskipRowsパラメータリストを受け付けます。違い(list_to_read)'が、私はそれが効率的であるとは思いません。それ以外にも、行ごとに解析してリストに変換し、DataFrameに変換する方が良い解決策のように思えます。 – ayhan

答えて

2

の多くのおかげで、あなたの場合は、 、INT:

NROWS:あなたはnrows kwargを見つけるread_csvためdocsの上に行きますデフォルトなしなし 読み込むファイルの行数。これはあなたがはそれを[0, 2, 10]を提供することはできませんつまり、ファイルからn最初の行ではなく、任意の行を(読み、それが1番目、3番目を読み取るために期待すること

注しかし、大きなファイルの断片を読み取るための有用な

0

ファイルを読んでいくうちに、データフレームを繰り返し更新することができます。これは高速な処理ではありませんが、ファイル全体をメモリに取り込まずに、データフレームに関心のある行だけを取得します。あなたが行数を知っていればあなたは `設定(レンジ(N))のような何かを行うことができますので、

import pandas as pd 

col_list = ['columnA', 'columnB', ... ] #fill in your data columns 
row_list = [0, 3, 10, ... ] 
df = pd.DataFrame(columns=col_list) 
row_number = 0 

with open('path/to/file', 'rb') as fp: 
    for i, line in enumerate(fp.xreadlines()): 
     if i in row_list: 
      data_line = map(float, line.strip().split(',')) #assumes all columns are floats 
      df.loc[row_number] = data_line 
      row_number += 1 
関連する問題