由于数据量巨大,我们用熊猫来处理数据,但是出现了一个非常奇怪的现象。伪代码如下所示:
reader = pd.read_csv(IN_FILE, chunksize = 1000, engine='c')
for chunk in reader:
result = []
for line in chunk.tolist():
temp = complicated_process(chunk) # this involves a very complicated processing, so here is just a simplified version
result.append(temp)
chunk['new_series'] = pd.series(result)
chunk.to_csv(OUT_TILE, index=False, mode='a')
我们可以确认每个循环的结果不是空的。但只有在循环的第一次,行chunk['new_series'] = pd.series(result)
才有结果,其余的都是空的。因此,只有输出的第一块包含新的序列,其余部分为空。在
我们错过什么了吗?提前谢谢。在
您应该在循环的上方声明
result
,否则您只是用每个块重新初始化它。在前面的方法在功能上等效于:
^{pr2}$另外,我建议:
我假设您正在对
for loop
中的line
变量进行操作,即使上面的示例中没有使用它。在更好的解决方案是:
注意:每个块的索引不是单独的,而是从整个文件派生的。如果我们从每个循环中附加一个新序列,块将从整个文件继承索引。因此,每个块和新序列的索引不匹配。在
@Alexander的解决方案是可行的,但是
result
可能会变得很大,因此它会占用太多内存。在这里的新解决方案将通过执行
new_chunk = chunk.reset_index()
来重置每个块的索引,result
将在每个循环中重置。这样可以节省大量内存。在相关问题 更多 >
编程相关推荐