Saya menjalankan program yang sedang memproses 30.000 file serupa. Sejumlah acak dari mereka berhenti dan menghasilkan kesalahan ini ...
File "C:\Importer\src\dfman\importer.py", line 26, in import_chr
data = pd.read_csv(filepath, names=fields)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 400, in parser_f
return _read(filepath_or_buffer, kwds)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 205, in _read
return parser.read()
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 608, in read
ret = self._engine.read(nrows)
File "C:\Python33\lib\site-packages\pandas\io\parsers.py", line 1028, in read
data = self._reader.read(nrows)
File "parser.pyx", line 706, in pandas.parser.TextReader.read (pandas\parser.c:6745)
File "parser.pyx", line 728, in pandas.parser.TextReader._read_low_memory (pandas\parser.c:6964)
File "parser.pyx", line 804, in pandas.parser.TextReader._read_rows (pandas\parser.c:7780)
File "parser.pyx", line 890, in pandas.parser.TextReader._convert_column_data (pandas\parser.c:8793)
File "parser.pyx", line 950, in pandas.parser.TextReader._convert_tokens (pandas\parser.c:9484)
File "parser.pyx", line 1026, in pandas.parser.TextReader._convert_with_dtype (pandas\parser.c:10642)
File "parser.pyx", line 1046, in pandas.parser.TextReader._string_convert (pandas\parser.c:10853)
File "parser.pyx", line 1278, in pandas.parser._string_box_utf8 (pandas\parser.c:15657)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xda in position 6: invalid continuation byte
Sumber / pembuatan semua file ini berasal dari tempat yang sama. Apa cara terbaik untuk memperbaikinya untuk melanjutkan impor?
cp1252
mungkin lebih disukaiiso-8859-1
.pd.read_csv('immigration.csv', encoding = "ISO-8859-1", engine='python')
berhasil untuk sayaANSI
. Untuk mengetahuinya, saya membuka csv dinotepad
kemudian kliksave as
, di sana itu menunjukkan pengkodean di sebelah tombol simpan.Solusi termudah:
Solusi Alternatif:
Kemudian, Anda dapat membaca file Anda seperti biasa:
dan jenis pengkodean berbeda lainnya adalah:
sumber
encoding='iso-8859-1'
, gunakan bukanengine='python'
melempar_csv.Error: field larger than field limit (131072)
.Panda memungkinkan untuk menentukan penyandian, tetapi tidak memungkinkan untuk mengabaikan kesalahan untuk tidak secara otomatis mengganti byte yang menyinggung. Jadi tidak ada satu ukuran yang cocok untuk semua metode tetapi cara yang berbeda tergantung pada kasus penggunaan yang sebenarnya.
Anda tahu penyandian, dan tidak ada kesalahan penyandian dalam file. Hebat: Anda baru saja menentukan pengkodean:
Anda tidak ingin diganggu dengan pertanyaan penyandian, dan hanya ingin file sialan itu dimuat, tidak masalah jika beberapa bidang teks mengandung sampah. Oke, Anda hanya perlu menggunakan
Latin1
pengodean karena ia menerima byte apa pun yang mungkin sebagai input (dan mengubahnya menjadi karakter unicode dari kode yang sama):Anda tahu bahwa sebagian besar file ditulis dengan penyandian khusus, tetapi juga berisi kesalahan penyandian. Contoh dunia nyata adalah file UTF8 yang telah diedit dengan editor non utf8 dan yang berisi beberapa baris dengan penyandian berbeda. Panda tidak memiliki ketentuan untuk pemrosesan kesalahan khusus, tetapi
open
fungsi Python telah (dengan asumsi Python3), danread_csv
menerima file seperti objek. Parameter kesalahan umum untuk digunakan di sini adalah'ignore'
yang hanya menekan byte yang menyinggung atau (IMHO lebih baik)'backslashreplace'
yang menggantikan byte yang menyinggung oleh urutan melarikan diri backslashed Python mereka:sumber
setelah mengeksekusi kode ini Anda akan menemukan pengkodean 'filename.csv' kemudian jalankan kode sebagai berikut
ini dia
sumber
Dalam kasus saya, file memiliki
USC-2 LE BOM
encoding, menurut Notepad ++. Iniencoding="utf_16_le"
untuk python.Semoga bermanfaat untuk menemukan jawaban yang sedikit lebih cepat bagi seseorang.
sumber
Dalam kasus saya ini berfungsi untuk python 2.7:
Dan untuk python 3, hanya:
sumber
Coba tentukan engine = 'python'. Itu berhasil untuk saya, tetapi saya masih mencoba mencari tahu mengapa.
sumber
Saya memposting jawaban untuk memberikan solusi dan penjelasan terbaru tentang mengapa masalah ini dapat terjadi. Katakanlah Anda mendapatkan data ini dari database atau buku kerja Excel. Jika Anda memiliki karakter khusus seperti
La Cañada Flintridge city
, baik kecuali jika Anda mengekspor data menggunakanUTF-8
pengkodean, Anda akan memperkenalkan kesalahan.La Cañada Flintridge city
akan menjadiLa Ca\xf1ada Flintridge city
. Jika Anda menggunakanpandas.read_csv
tanpa penyesuaian pada parameter default, Anda akan menemukan kesalahan berikutUntungnya, ada beberapa solusi.
Opsi 1 , perbaiki ekspor. Pastikan untuk menggunakan
UTF-8
pengodean.Opsi 2 , jika memperbaiki masalah ekspor tidak tersedia untuk Anda, dan Anda perlu menggunakan
pandas.read_csv
, pastikan untuk menyertakan parameter berikutengine='python'
,. Secara default, panda menggunakanengine='C'
yang bagus untuk membaca file besar yang bersih, tetapi akan macet jika sesuatu yang tidak terduga muncul. Dalam pengalaman saya, pengaturanencoding='utf-8'
tidak pernah memperbaiki iniUnicodeDecodeError
. Selain itu, Anda tidak perlu menggunakanerrors_bad_lines
, namun, itu masih merupakan opsi jika Anda BENAR - BENAR membutuhkannya.Opsi 3: solusi adalah solusi pilihan saya secara pribadi. Baca file menggunakan vanilla Python.
Semoga ini bisa membantu orang menghadapi masalah ini untuk pertama kalinya.
sumber
Berjuang dengan ini sebentar dan berpikir saya akan memposting pertanyaan ini karena ini adalah hasil pencarian pertama. Menambahkan
encoding="iso-8859-1"
tag ke pandaread_csv
tidak berfungsi, juga penyandian lainnya, terus memberikan UnicodeDecodeError.Jika Anda memberikan pegangan file ke
pd.read_csv(),
Anda harus menempatkanencoding
atribut pada file terbuka, bukan diread_csv
. Jelas di belakang, tetapi kesalahan halus untuk melacak.sumber
Silakan coba tambahkan
Ini akan membantu. Bekerja untukku. Pastikan juga Anda menggunakan pembatas dan nama kolom yang benar.
Anda dapat mulai dengan memuat hanya 1000 baris untuk memuat file dengan cepat.
sumber
Jawaban ini tampaknya cocok untuk semua masalah pengkodean CSV. Jika Anda mendapatkan masalah penyandian yang aneh dengan tajuk Anda seperti ini:
Kemudian Anda memiliki karakter tanda pesanan byte (BOM) di awal file CSV Anda. Jawaban ini mengatasi masalah:
Python read csv - BOM disematkan ke kunci pertama
Solusinya adalah memuat CSV dengan
encoding="utf-8-sig"
:Semoga ini bisa membantu seseorang.
sumber
Saya memposting pembaruan ke utas lama ini. Saya menemukan satu solusi yang berhasil, tetapi membutuhkan pembukaan setiap file. Saya membuka file csv saya di LibreOffice, memilih Simpan Sebagai> edit pengaturan filter. Dalam menu drop-down saya memilih pengkodean UTF8. Lalu saya menambahkan
encoding="utf-8-sig"
kedata = pd.read_csv(r'C:\fullpathtofile\filename.csv', sep = ',', encoding="utf-8-sig")
.Semoga ini bisa membantu seseorang.
sumber
Saya kesulitan membuka file CSV dalam bahasa Cina sederhana yang diunduh dari bank online, saya sudah mencoba
latin1
, sudah mencobaiso-8859-1
, sudah mencobacp1252
, semuanya sia-sia.Tetapi
pd.read_csv("",encoding ='gbk')
cukup berhasil.sumber
Saya menggunakan Jupyter-notebook. Dan dalam kasus saya, itu menunjukkan file dalam format yang salah. Opsi 'encoding' tidak berfungsi. Jadi saya menyimpan csv dalam format utf-8, dan berfungsi.
sumber
Coba ini:
Sepertinya itu akan menangani pengodean tanpa secara eksplisit mengungkapkannya melalui argumen
sumber
Periksa pengodean sebelum Anda beralih ke panda. Ini akan memperlambat Anda, tetapi ...
Dalam python 3.7
sumber
Masalah penting lain yang saya hadapi yang menghasilkan kesalahan yang sama adalah:
sumber
read_excel
panda.Anda bisa mencoba ini.
sumber