2016-08-24 60 views
1

我想知道是否有pandas.read_csv函數的選項,它允許我只加載原始csv文件中的特定行列表。只加載使用熊貓read_csv函數的行列表 - Python

csv文件真的很大,而且由於缺少內存,我無法加載整個文件。
是否有一個選項,如:

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

list_to_read = [0,2,10]例如(這將只讀取該行0,行2和行10)

提前

+0

skiprows參數接受一個列表,所以如果你知道的行數,你可以這樣做'設置(範圍(N))。差(list_to_read)'但我不認爲這將是有效的。除此之外,逐行解析到列表並轉換爲DataFrame似乎是更好的解決方案。 – ayhan

回答

2

非常感謝如果您走在docsread_csv,你會發現nrows kwarg:

NROWS:INT,默認值無 要讀取的文件的行數。有用的

不過請注意閱讀的大文件碎片,這將讀取該文件的n第一行,不亂行(即你不能提供它[0, 2, 10],並期望它來讀取第一,第三和第11行)

0

您可能希望在讀取文件時反覆更新數據框。這不是一個快速的過程,但它只會將感興趣的行放入數據框中,而不會將整個文件拖入內存。

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