我有一个庞大的数据集,正在尝试逐行读取它。目前,我正在使用Pandas读取数据集:
df = pd.read_csv("mydata.csv", sep =',', nrows = 1)
这个函数允许我只读取第一行,但是如何读取第二行,第三行等等呢? (我想使用pandas。)
编辑: 为了更清楚,我需要逐行读取,因为数据集有20 GB,而且我不能在内存中保存所有的东西。
我有一个庞大的数据集,正在尝试逐行读取它。目前,我正在使用Pandas读取数据集:
df = pd.read_csv("mydata.csv", sep =',', nrows = 1)
这个函数允许我只读取第一行,但是如何读取第二行,第三行等等呢? (我想使用pandas。)
编辑: 为了更清楚,我需要逐行读取,因为数据集有20 GB,而且我不能在内存中保存所有的东西。
一种方法是逐部分阅读您的文件并存储每个部分,例如:
df1 = pd.read_csv("mydata.csv", nrows=10000)
在这里,您将跳过已经读取并存储在df1中的前10000行,并将接下来的10000行存储在df2中。
df2 = pd.read_csv("mydata.csv", skiprows=10000 nrows=10000)
dfn = pd.read_csv("mydata.csv", skiprows=(n-1)*10000, nrows=10000)
也许有一种方法可以将这个想法引入for循环或while循环中。
在pandas文档中,read_csv函数有一个参数:
skiprows
如果该参数分配了一个列表,它将跳过列表中所标记的行:
skiprows = [0,1]
nrow
和 skiprows
的组合允许逐行读取数据集。nrows = 1
,意思是“要读取的文件行数。适用于读取大文件的一部分”。我发现使用skiprows
非常慢。这种方法对我很有效:
line_number = 8 # the row you want. 0-indexed
import pandas as pd
import sys # or `import itertools`
import csv
# you can wrap this block in a function:
# (filename, line_number[, max_rows]) -> row
with open(filename, 'r') as f:
r = csv.reader(f)
for i in range(sys.maxsize**10): # or `i in itertools.count(start=0)`
if i != line_number:
next(r) # skip this row
else:
row = next(r)
row = pd.DataFrame(row) # or transform it however you like
break # or return row, if this is a function
# now you can use `row` !
sys.maxsize**10
替换为实际的总行数和/或确保line_number
是非负数,并在row = next(r)
行周围放置一个try/except StopIteration
块,以便您可以捕获读取器到达文件结尾的情况。