Numpy: npyio.loadtxt adalah input file teks yang mentransmisikan byte, bahkan dengan str dtype yang ditentukan.

Dibuat pada 8 Nov 2012  ·  11Komentar  ·  Sumber: numpy/numpy

Lingkungan Hidup

  • Python: Versi 3.3 (rilis python.org) di OS X Mountain Lion
  • numpy: Kloning dari git master

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.

00 - Bug numpy.lib

Komentar yang paling membantu

Cukup mengejutkan bahwa ini belum diperbaiki selama 5 tahun

Semua 11 komentar

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.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

qualiaa picture qualiaa  ·  3Komentar

Kreol64 picture Kreol64  ·  3Komentar

Foadsf picture Foadsf  ·  3Komentar

astrofrog picture astrofrog  ·  4Komentar

marcocaccin picture marcocaccin  ·  4Komentar