我想知道是否有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