环境
在包含字符串的文件上调用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'))
获得相同的结果,每个conv
和compat.asbytes
。
看完代码后,似乎所有字符串都用asbytes(...)
遍历了字节,例如split_line(...)
,因此这必须意味着模块中的每个例程都已损坏。
我也有那个问题。 这非常非常烦人。 基本上,您不能在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中修复。
闭幕。 请根据需要重新打开。
最有用的评论
令人震惊的是,这已经五年没有解决了