pandas读取大量数据的分块处理

 

数据分块

csv 格式是一种易储存, 易更改并且用户易读取的格式。 pandas 有read_csv ()方法来上传数据,存储为CSV 格式。当遇到CSV 文件过大,导致内存不足的问题该怎么办呢?试试强大的pandas 工具吧!我们先把整个文件拆分成小块。这里,我们把拆分的小块称为chunk。

一个chunk 就是我们数据的一个小组。 Chunk 的大小主要依据我们内存的大小,自行决定。

过程如下:

1.读取一块数据。

2.分析数据。

3.保存该块数据的分析结果。

4.重复1-3步骤,直到所有chunk 分析完毕。

5.把所有的chunk 合并在一起。


1、指定chunksize分块读取文件

read_csv 和 read_table 有一个 chunksize 参数,用以指定一个块大小(每次读取多少行),返回一个可迭代的 TextFileReader 对象。
代码如下:

table=pd.read_table(path+'kuaishou.txt',sep='\t',chunksize=1000000)
df_list=[]
for df in table:
    #1.对每一个分块df处理
    #2.添加每一个df(df_list.apend(df))
    #print(type(df),df.shape)打印看一下信息
df = pd.concat(df_list, ignore_index=True)

 

2、指定iterator=True

iterator=True同样返回的是TextFileReader对象

import pandas as pd

f = open('./data/ows-raw.txt',encoding='utf-8')
reader = pd.read_table(f, sep=',', iterator=True, error_bad_lines=False) #跳过报错行
loop = True
chunkSize = 1000
chunks = []
while loop:
  try:
    chunk = reader.get_chunk(chunkSize)
    chunks.append(chunk)
  except StopIteration:
    loop = False
    print("Iteration is stopped.")
df = pd.concat(chunks, ignore_index=True)

 

posted @ 2020-03-27 14:05  -零  阅读(6265)  评论(0编辑  收藏  举报