我正在用pandas读取一个超大csv文件(10G),read_csv(filename,chunksize=chunksize)返回一个迭代器(assum it names‘reader’)。现在我想得到一个精确的块,因为我只需要一些行(例如,我读的csv文件有100000000行,我想得到50000000行,后面有1000行),除了tranverse迭代器,我应该怎么做,直到它到达我想要的块?你知道吗
这是我以前的密码:
def get_lines_by_chunk(file_name, line_beg, line_end, chunk_size=-1):
func_name = 'get_lines_by_chunk'
line_no = get_file_line_no(file_name)
if chunk_size < 0:
chunk_size = get_chunk_size(line_no, line_beg, line_end)
reader = pd.read_csv(file_name, chunksize=chunk_size)
data = pd.DataFrame({})
flag = 0
for chunk in reader:
line_before = flag * chunk_size
flag = flag + 1
line_after = flag * chunk_size
if line_beg >= line_before and line_beg <= line_after:
if line_end >= line_after:
temp = chunk[line_beg - line_before : chunk_size]
data = pd.concat([data, temp], ignore_index=True)
else:
temp = chunk[line_beg - line_before : line_end - line_before]
data = pd.concat([data, temp], ignore_index=True)
return data
elif line_end <= line_after and line_end >= line_before:
temp = chunk[0 : line_end - line_before]
data = pd.concat([data, temp], ignore_index=True)
return data
elif line_beg < line_before and line_end > line_after:
temp = chunk[0 : chunk_size]
data = pd.concat([data, temp], ignore_index=True)
return data
如果需要用不同大小的块读取CSV文件,可以使用
iterator=True
:假设我们有一个1000行的DF(关于它是如何生成的,请参见设置部分)
注意:
get_chunk
不能跳过数据,它将连续读取具有指定块大小的数据如果只想读取第100-110行:
但是,如果您可以使用HDF5格式,它将更容易和更快:
先将其另存为HDF5:
现在我们可以通过索引位置来读取它,如下所示:
或查询(类似SQL):
设置:
相关问题 更多 >
编程相关推荐