请尝试了解以下read_csv行为的原因: 我试图以块的形式阅读一个巨大的文件
c=1
for chunk in pd.read_csv(filename, chunksize=chunksize):
print 'chunk ', str(c), ' started'
....data normalization....
....saving the transformed data to file....
我收到这样的错误:
sys:1: DtypeWarning: Columns (...) have mixed types. Specify dtype option on import or set low_memory=False.
chunk 19 started
Traceback (most recent call last):
...
TypeError: unsupported operand type(s) for -: 'str' and 'float'
从我可以看到的错误,由于某种原因,在块19大熊猫将浮动数据解释为字符串,并且不能执行' - '操作
然而,如果我跳过18个块,并从块19开始,那就顺利了。 直觉说这可能是一些记忆问题,但我想了解原因。
答案 0 :(得分:1)
这不是内存问题。
如果不指定dtype
参数,Pandas会猜测数据类型应该是什么。有时,它意识到它是一个错误,并且如果认为这是正确的事情,它将动态转换列的数据类型。在这种情况下,似乎它猜测正确的类型是数字类型,然后在遇到一些数据时会认为该列应该是字符串,并且正在进行转换。数据中是否有任何类似'N/A'
的数据?
只需指定dtype
参数即可。它会使read_csv
更快更高效,您可以解决问题,也可以更好地了解导致问题的原因。