我想知道是否有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)
提前
我想知道是否有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)
提前
非常感谢如果您走在docs为read_csv
,你会发现nrows
kwarg:
NROWS:INT,默认值无 要读取的文件的行数。有用的
不过请注意阅读的大文件碎片,这将读取该文件的n
第一行,不乱行(即你不能提供它[0, 2, 10]
,并期望它来读取第一,第三和第11行)
您可能希望在读取文件时反复更新数据框。这不是一个快速的过程,但它只会将感兴趣的行放入数据框中,而不会将整个文件拖入内存。
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
skiprows参数接受一个列表,所以如果你知道的行数,你可以这样做'设置(范围(N))。差(list_to_read)'但我不认为这将是有效的。除此之外,逐行解析到列表并转换为DataFrame似乎是更好的解决方案。 – ayhan