1 回答
TA贡献1831条经验 获得超10个赞
循环的一般语法for是
for target in expression:
do all the things
Python 会将表达式计算为一个对象,只有当计算完成时,它才会将该对象分配给目标变量。这意味着任何已存在的对象在target其替换对象构建完成之前都不会被删除。
除非创建的对象很大,否则这没什么大不了的。这里就是这种情况。创建新块时,即将删除的块位于内存中,这实际上使对内存的影响加倍。解决方案是在返回更多目标之前手动删除循环中的目标。
for chunk in pd.read_csv(fname, chunksize=chunksize,sep='|',error_bad_lines=False):
chunk['col1'] = chunk['col1'].apply(process1)
chunk['col2'] = chunk['col2'].apply(process2)
if c == 0:
chunk.to_csv("result/result.csv", index=False)
else:
chunk.to_csv('result/result.csv', mode='a', header=False, index=False)
del chunk # destroy dataframe before next loop to conserve memory.
if c%10==0:
print(c)
c+=1
添加回答
举报