Окружающая обстановка
При вызове 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(...)
, так что это должно означать, что все подпрограммы в модуле сломаны.
У меня тоже есть такая проблема. Это очень раздражает; в основном вы не можете использовать loadtxt в Python3.
Временное решение: я удалил все вызовы asbytes () в методе loadtxt.
Да, я помню, как подумал, что там что-то не так, когда просматривал код.
Для записи, я сталкиваюсь с той же проблемой с входами datetime64, что приводит к ошибке синтаксического анализа в форме: Error parsing datetime string "b'2013-01-02'"
. Чтобы обойти это, мне пришлось создать конвертер для этого столбца:
def decoder(input_bytes):
return input_bytes.decode("ascii")
Это было бы хорошо в производственном коде, но очень неприятно для учебных материалов ...
Отталкивание до 1.11.
обходной путь - сначала запустите iconv для файла.
отталкивание до 1.12.
Я вижу, что это продвигается вперед, но я считаю, что это ошибка, которую следует исправить, и исправление, похоже, легко реализуется.
Довольно шокирует, что это не исправляли 5 лет.
Похоже, что в 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'
Похоже, это было исправлено в # 8349 в ответ на # 8033.
Закрытие. Пожалуйста, откройте повторно, если необходимо.
Самый полезный комментарий
Довольно шокирует, что это не исправляли 5 лет.