環境
次のように文字列を含むファイルで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
とcompat.asbytes
ごとに、 str(str('12/31/2020').encode('latin1'))
から同じ結果が得られるため、すべての文字列はバイトキャストされ、 conv
を介して文字列化されています。 compat.asbytes
。
コードを見ると、たとえばsplit_line(...)
ように、すべての文字列がasbytes(...)
バイトキャストされているように見えます。したがって、これはモジュール内のすべてのルーチンが壊れていることを意味するはずです。
私もその問題を抱えています。 これは非常に迷惑です。 基本的に、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にプッシュオフ。
これは進められているようですが、これは対処すべきバグであり、修正は簡単に実装できるようです。
これが5年間修正されていないことはかなり衝撃的です
これはNumPy1.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で修正されたようです。
閉鎖。 必要に応じて再度開いてください。
最も参考になるコメント
これが5年間修正されていないことはかなり衝撃的です