转载:http://cloga.info/python/2016/08/24/pandas-big-data-tips
近期的工作和Hive SQL打交道比较多,偶尔遇到一些SQL不好解决的问题,会将文件下载下来用pandas来处理,由于数据量比较大,因此有一些相关的经验可以和大家分享。
大文本数据的读写
有时候我们会拿到一些很大的文本文件,完整读入内存,读入的过程会很慢,甚至可能无法读入内存,或者可以读入内存,但是没法进行进一步的计算,这个时候如果我们不是要进行很复杂的运算,可以使用read_csv提供的chunksize或者iterator参数,来部分读入文件,处理完之后再通过to_csv的mode=’a’,将每部分结果逐步写入文件。
注:如果想写入行一定要将numpy数组转为2维,有行有列,如果你的numpy只有列,那么每次一存就只能存为列
import pandas as pd
input = pd.read_csv('input.csv', chunksize=1000000)
for i in input:
chunk = dosomethig(input)# 进行一些操作
chunk.to_csv('output.csv', mode='a', header=False) # 记得使用header=False不然会重复写入列名
input = pd.read_csv('input.csv', iterator=True)
while loop:
try:
chunk = reader.get_chunk(1000000)
chunk.to_csv('output.csv', mode='a', header=False) # 和上面的代码作用一样只是通过iterator来实现
except StopIteration:
break