面对动辄几十G上百G的大型数据表文件,如果使用pandas的read_csv一次性读取处理(比如数据分选),该操作会一次性消耗服务器大量的硬件资源(可能面临内存溢出),所以就非常有必要使用chunksize对数据按行切块进行处理。参数 chunksize 通过指定每次读取多少⾏来读取⼤数据⽂件,返回的是⼀个可迭代对象TextFileReader。
with pd.read_csv("./outfile.txt",sep='\t',chunksize=100) as reader_iter: #
open(f'my_csv.txt', 'w').close() #新建一个空文件,后续被用以追加的方式写入数据
for i,e in enumerate(reader_iter,1):
print(">>>>>>>>>>>>>>>>>>>>>>>",i) #显示当前处理的是第i个chunk
e.iloc[:,0] = e.iloc[:,0].str.replace('_','+')
e.iloc[:,1] = round(e.iloc[:,1] + 1 ,2)
e["chunk.no"] = str(i)
print(e)
if i==1:
e.to_csv('my_csv.txt', mode='a', header=True,sep='\t') #如果处理的是第一个chunk,则向文件写出表头
else:
e.to_csv('my_csv.txt', mode='a', header=False,sep='\t') #后续处理的chunk向文件追加写入不含表头数据
网友评论