今天遇到一个奇怪的bug,我用一个map迭代器作为数据源来创建dataframe。我很确定map迭代器里是有data的,但是最后生成的dataframe却总为空。
最后发现问题出现的原因在于map迭代器只能被读取一次,之后就会被销毁。而我在debug过程中先一步执行了一下dataframe 生成的code,也就是已经读取一遍map了,之后等code真的跑到这里,再去读取map 的时候,map迭代器已经被销毁了。
举个简单的例子:
def test():
a = [(1.1, 1.2, 1.3), (2.1, 2.2, 2.3)]
b = map(lambda item: [
item[0] *10,
item[1]* 100
], a)
df = pd.DataFrame(list(b), columns=['十位', '百位'])
print(df)
if __name__ == '__main__':
test()
输出结果:
正确结果
但是呢,如果我在调试过程中,手动读取map迭代器:
当前尚且未执行40行代码,手动执行创建dataframe操作
这时候,如果我让程序继续执行,也就是真正地走40行代码,这个时候map迭代器已经被销毁了。
结果:
异常结果