由于数据量巨大,我们使用熊猫来处理数据,但出现了一个非常奇怪的现象。伪代码如下所示:具有块大小选项的pandas.read_csv函数的奇怪索引机制
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)
行有结果,其余都是空的。因此,只有输出的第一个块包含new_series,其余都是空的。
我们错过了什么吗?提前致谢。
非常感谢。是的,你的建议奏效了。但我不明白为什么移动result = []以外的作品。这对我来说很尴尬。你能详细说一下吗?非常感谢! – acepor
感谢您的解释。但这并不是造成问题的原因。当我们追踪每个块的索引时,我发现它们不是单独的。我们假设每个块都会从0开始索引,但实际上它不是。在这种情况下,每个块的索引是整个CSV的一个子集,因此它们的索引源自CSV。这是造成问题的原因。在上面的例子中,'pandas.to_csv'只写入第一个块的结果,而不是最后一个块。但我仍然会感谢你的灵感;否则,我真的不知道如何解决这个问题。 – acepor
您是否使用我的'chunk = chunk.assign(new_series = result)'建议?我不认为你会有这个问题。 – Alexander