熊猫read_csv奇怪的行为

时间:2016-10-31 21:00:05

标签: python pandas

请尝试了解以下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开始,那就顺利了。 直觉说这可能是一些记忆问题,但我想了解原因。

1 个答案:

答案 0 :(得分:1)

这不是内存问题。

如果不指定dtype参数,Pandas会猜测数据类型应该是什么。有时,它意识到它是一个错误,并且如果认为这是正确的事情,它将动态转换列的数据类型。在这种情况下,似乎它猜测正确的类型是数字类型,然后在遇到一些数据时会认为该列应该是字符串,并且正在进行转换。数据中是否有任何类似'N/A'的数据?

只需指定dtype参数即可。它会使read_csv更快更高效,您可以解决问题,也可以更好地了解导致问题的原因。