Lingkungan Hidup
Saat memanggil numpy.loadtxt
pada file yang berisi string sebagai berikut:
import numpy as np
datestxt = np.loadtxt("NYSE_dates.txt", dtype=str)
print(datetxt)
Di mana NYSE_dates.txt hanyalah daftar tanggal (bisa jadi apa saja):
7/5/1962
7/6/1962
7/9/1962
...
12/29/2020
12/30/2020
12/31/2020
Outputnya adalah:
["b'7/5/1962'" "b'7/6/1962'" "b'7/9/1962'" ..., "b'12/29/2020'"
"b'12/30/2020'" "b'12/31/2020'"]
Seperti yang Anda lihat, semua string telah dicor byte, kemudian dirangkai melalui conv
, karena Anda akan mendapatkan hasil yang sama dari str(str('12/31/2020').encode('latin1'))
, per conv
& compat.asbytes
.
Setelah melihat kode, tampaknya semua string di-bytes dengan asbytes(...)
hampir seluruhnya, seperti misalnya di split_line(...)
, jadi ini berarti setiap rutinitas dalam modul rusak.
Saya juga punya masalah itu. Ini sangat mengganggu; pada dasarnya Anda tidak dapat menggunakan loadtxt di Python3.
Solusi sementara: Saya menghapus semua panggilan asbytes () dalam metode loadtxt.
Ya, saya ingat pernah berpikir ada sesuatu yang mencurigakan di sana ketika saya melihat-lihat kodenya.
Sebagai catatan, saya mengalami masalah yang sama dengan input datetime64, yang menyebabkan kesalahan penguraian dalam bentuk: Error parsing datetime string "b'2013-01-02'"
. Untuk mengatasi ini, saya harus membuat konverter untuk kolom itu:
def decoder(input_bytes):
return input_bytes.decode("ascii")
Ini akan baik-baik saja dalam kode produksi tetapi sangat tidak bagus untuk materi pelatihan ...
Mendorong ke 1.11.
work-around - jalankan iconv pada file tersebut terlebih dahulu.
mendorong ke 1,12.
Saya melihat bahwa ini didorong ke depan, tetapi saya menemukan itu adalah bug yang harus diatasi, dan perbaikan tampaknya dapat dengan mudah diterapkan.
Cukup mengejutkan bahwa ini belum diperbaiki selama 5 tahun
Sepertinya ini berfungsi seperti yang diinginkan di NumPy 1.13.3 (meskipun saya tidak yakin PR mana yang memperbaikinya). Bisakah masalah ini ditutup?
>>> 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'
Sepertinya ini telah diperbaiki di # 8349, sebagai tanggapan atas # 8033.
Penutupan. Harap buka kembali jika perlu.
Komentar yang paling membantu
Cukup mengejutkan bahwa ini belum diperbaiki selama 5 tahun