利用pandas的chunksize分块处理大型csv文件
当读取超大的csv文件时,可能一次性不能全部放入内存中,从而无法加载,所以需要分块处理。
在read_csv中有个参数chunksize,通过指定一个chunksize分块大小来读取文件,返回的是一个可迭代的对象TextFileReader
import pandas as pd
''' chunksize:每一块有100行数据 iterator:可迭代对象 '''
reader = pd.read_csv('all_test.csv',chunksize=100,iterator=True)
count = 0;
# 可以使用for循环 对每一块的数据进行操作
for chunk in reader:
'''
可以对块中的某列数据进行操作 将每个chunk里面的时间戳变换成时间格式
chunk['colunmn_name'] = pd.to_datetime(chunk['colunmn_name'],unit='s',origin=pd.Timestamp('2018-07-01')))
可以对每一行数据进行操作
for i in range(len(chunk)):
'''
count += 1
if count ==1:
# 去除索引index
chunk.to_csv('test.csv',index = False)
elif count>1 and count<100:
# 去除索引index 和 列名header 以追加的方式添加mode
chunk.to_csv('test.csv',index = False, mode = 'a',header = False)
else:
break
pd.read_csv('test.csv')
# 此外由于是可迭代对象 可取出前5行的数据观察
chunks = pd.read_csv('train.csv',iterator = True)
chunk = chunks.get_chunk(5)