2016-08-24 76 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