【问题标题】:Pandas read_csv strange behaviour熊猫 read_csv 奇怪的行为
【发布时间】:2016-10-31 21:00:04
【问题描述】:

请尝试了解以下 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 pandas 将浮点数据解释为字符串,并且无法执行“-”操作。

但是,如果我跳过 18 个块,并从第 19 个块开始,它会顺利进行。 直觉说这可能是一些记忆问题,但我想了解原因。

【问题讨论】:

  • 你试过“指定[ing] dtype选项吗?”
  • 例如` dtype = {‘col1’: np.float64, ‘col2: np.int32}`

标签: python pandas


【解决方案1】:

这不是内存问题。

如果您不指定 dtype 参数,Pandas 会猜测数据类型应该是什么。有时,它会意识到自己犯了一个错误,如果它认为这是正确的做法,它会即时转换列的数据类型。在这种情况下,它似乎在猜测正确的类型是数字类型,然后遇到一些使其认为该列确实应该是字符串的数据,并且正在转换。数据中是否有任何类似'N/A' 的内容?

只需指定dtype 参数。这将使read_csv 更快、更高效,并且您可以解决问题,或者更好地了解导致问题的原因。

【讨论】:

  • 不,不适用。有一些字符串的机会,但最后它正确处理了所有块(当跳过上一次运行已经处理的块时)。如果我指定 dtype 参数,它会抛出这样的错误:float64 的错误类型:0,0.0,0.0,0.0,0。 ...
猜你喜欢
  • 1970-01-01
  • 2013-08-18
  • 2018-01-27
  • 2022-01-14
  • 1970-01-01
  • 2016-03-30
  • 2019-07-12
  • 2017-08-02
  • 1970-01-01
相关资源
最近更新 更多