Numpy: npyio.loadtxt是字节广播文本文件输入,即使指定了str dtype。

创建于 2012-11-08  ·  11评论  ·  资料来源: numpy/numpy

环境

  • Python:OS X Mountain Lion上的3.3版(python.org发行版)
  • numpy:从git master克隆

在包含字符串的文件上调用numpy.loadtxt时,如下所示:

import numpy as np
datestxt = np.loadtxt("NYSE_dates.txt", dtype=str)
print(datetxt)

其中NYSE_dates.txt只是日期列表(可能是真的):

7/5/1962
7/6/1962
7/9/1962
...
12/29/2020
12/30/2020
12/31/2020

输出为:

["b'7/5/1962'" "b'7/6/1962'" "b'7/9/1962'" ..., "b'12/29/2020'"
 "b'12/30/2020'" "b'12/31/2020'"]

如您所见,所有字符串都已字节传输,然后通过conv进行了字符串化,因为您将从str(str('12/31/2020').encode('latin1'))获得相同的结果,每个convcompat.asbytes

看完代码后,似乎所有字符串都用asbytes(...)遍历了字节,例如split_line(...) ,因此这必须意味着模块中的每个例程都已损坏。

00 - Bug numpy.lib

最有用的评论

令人震惊的是,这已经五年没有解决了

所有11条评论

我也有那个问题。 这非常非常烦人。 基本上,您不能在Python3中使用loadtxt。

临时解决方案:我删除了loadtxt方法中的所有asbytes()调用。

是的,我记得当我查看代码时,以为其中有些可疑。

作为记录,我在使用datetime64输入时遇到了同样的问题,导致了以下形式的解析错误: Error parsing datetime string "b'2013-01-02'" 。 要解决此问题,我必须为该列创建一个转换器:

def decoder(input_bytes):
    return input_bytes.decode("ascii")

这在生产代码中会很好,但是对于培训材料来说却非常不漂亮。

推至1.11。

解决方法-首先在文件上运行iconv。

推至1.12。

我看到它正在被推进,但是我发现这是一个应该解决的错误,并且似乎很容易实现此修复程序。

令人震惊的是,这已经五年没有解决了

看起来这在NumPy 1.13.3中可以正常工作(尽管我不确定哪个PR对其进行了修复)。 这个问题可以解决吗?

>>> import io
>>> import numpy as np
>>> f = io.StringIO("7/5/1962\n7/6/1962\n")
>>> np.loadtxt(f, dtype=str)
array(['7/5/1962', '7/6/1962'],
      dtype='<U8')
>>> np.__version__
'1.13.3'

响应#8033,此问题似乎已在#8349中修复。

闭幕。 请根据需要重新打开。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

Kreol64 picture Kreol64  ·  3评论

keithbriggs picture keithbriggs  ·  3评论

dcsaba89 picture dcsaba89  ·  3评论

marcocaccin picture marcocaccin  ·  4评论

MareinK picture MareinK  ·  3评论