Saya mengalami masalah dengan read_csv
(Pandas 0.17.0) saat mencoba membaca file csv 380+ MB. File dimulai dengan 54 bidang tetapi beberapa baris memiliki 53 bidang, bukan 54. Menjalankan kode di bawah ini memberi saya kesalahan berikut:
parser = lambda x: datetime.strptime(x, '%y %m %d %H %M %S %f')
df = pd.read_csv(filename,
names=['YR', 'MO', 'DAY', 'HR', 'MIN', 'SEC', 'HUND',
'ERROR', 'RECTYPE', 'LANE', 'SPEED', 'CLASS',
'LENGTH', 'GVW', 'ESAL', 'W1', 'S1', 'W2', 'S2',
'W3', 'S3', 'W4', 'S4', 'W5', 'S5', 'W6', 'S6',
'W7', 'S7', 'W8', 'S8', 'W9', 'S9', 'W10', 'S10',
'W11', 'S11', 'W12', 'S12', 'W13', 'S13', 'W14'],
usecols=range(0, 42),
parse_dates={"TIMESTAMP": [0, 1, 2, 3, 4, 5, 6]},
date_parser=parser,
header=None)
Kesalahan:
CParserError: Error tokenizing data. C error: Expected 53 fields in line 1605634, saw 54
Jika saya meneruskan kata kunci error_bad_lines=False
, baris bermasalah ditampilkan seperti contoh di bawah ini:
Skipping line 1683401: expected 53 fields, saw 54
namun saya mendapatkan kesalahan berikut kali ini (juga DataFrame tidak dimuat):
CParserError: Too many columns specified: expected 54 and found 53
Jika saya meneruskan kata kunci engine='python'
, saya tidak mendapatkan kesalahan apa pun, tetapi membutuhkan waktu yang sangat lama untuk mengurai data. Harap dicatat bahwa 53 dan 54 dialihkan dalam pesan kesalahan tergantung pada apakah error_bad_lines=False
digunakan atau tidak.
kesalahan ini semuanya benar. Anda membatasi apa yang dilakukan parser dengan mengirimkan usecols
, dan names
. jangan lakukan ini dan lihat apakah Anda dapat menguraikannya.
sangat sulit untuk mendiagnosis sesuatu seperti ini tanpa sampel file yang mereproduksi.
juga tampilkan pd.show_versions()
Dengan file data asli:
pd.read_csv(filename)
tanpa kata kunci lain tampaknya mengurai data tanpa kesalahan. pd.read_csv(filename, header=None)
memberikan kesalahan berikut:
CParserError: Error tokenizing data. C error: Expected 53 fields in line 1605634, saw 54
Sangat setuju bahwa sangat sulit untuk mendiagnosis tanpa data sampel. Saya mencoba menghasilkan kesalahan dengan file csv dengan beberapa baris (beberapa memiliki 53 bidang, beberapa 54), pd.read_csv
mengisi celah dengan NaN seperti yang diharapkan. Saya ulangi dengan melewatkan usecols
dan header=None
, masih berfungsi. Tampaknya file asli memiliki masalah yang menyebabkan semua kesalahan.
pd.show_versions()
keluaran sebagai berikut:
INSTALLED VERSIONS
------------------
commit: None
python: 2.7.10.final.0
python-bits: 64
OS: Windows
OS-release: 7
machine: AMD64
processor: Intel64 Family 6 Model 58 Stepping 9, GenuineIntel
byteorder: little
LC_ALL: None
LANG: None
pandas: 0.17.0
nose: 1.3.7
pip: 7.1.2
setuptools: 18.4
Cython: 0.22.1
numpy: 1.10.1
scipy: 0.16.0
statsmodels: 0.6.1
IPython: 3.2.0
sphinx: 1.3.1
patsy: 0.3.0
dateutil: 2.4.2
pytz: 2015.6
blosc: None
bottleneck: 1.0.0
tables: 3.2.0
numexpr: 2.4.3
matplotlib: 1.4.3
openpyxl: 1.8.5
xlrd: 0.9.3
xlwt: 1.0.0
xlsxwriter: 0.7.3
lxml: 3.4.4
bs4: 4.3.2
html5lib: None
httplib2: None
apiclient: None
sqlalchemy: 1.0.5
pymysql: None
psycopg2: None
pd.read_csv(filename, header=None) gives the following error:
CParserError: Error tokenizing data. C error: Expected 53 fields in line 1605634, saw 54
diharapkan karena jumlah kolom disimpulkan dari baris pertama. Jika Anda mengirimkan names
jika akan menggunakan ini sebagai fitur penentu.
Jadi teruslah mencoba berbagai pilihan. Sebenarnya Anda membatasi sedikit dengan names
dan usecols
. Anda mungkin lebih baik membacanya, kemudian mengindeks ulang apa yang Anda butuhkan.
Jika engine='python'
digunakan, anehnya, ia memuat DataFrame tanpa masalah. Saya menggunakan cuplikan berikut untuk mengekstrak 3 baris pertama dalam file dan 3 baris yang menyinggung (mendapatkan nomor baris dari pesan kesalahan).
from csv import reader
N = int(input('What line do you need? > '))
with open(filename) as f:
print(next((x for i, x in enumerate(reader(f)) if i == N), None))
Baris 1-3:
['08', '8', '7', '5', '0', '12', '54', '0', '11', '1', '58', '9', '68', '48.2', '0.756', '11.6', '17.5', '13.3', '4.3', '11.3', '32.2', '6.4', '4.1', '5.6', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '', '', '', '', '', '', '', '', '', '', '', '32']
['08', '8', '7', '5', '0', '15', '80', '0', '11', '1', '62', '9', '69', '77.8', '3.267', '11.2', '17.7', '14.8', '4.2', '15.2', '29.1', '18.4', '10.0', '18.1', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '', '', '', '', '', '', '', '', '', '', '', '32']
['08', '8', '7', '5', '0', '21', '52', '0', '11', '1', '61', '11', '51', '29.4', '0.076', '4.1', '13.8', '8.3', '21.5', '5.3', '3.1', '5.7', '3.0', '6.1', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '', '', '', '', '', '', '', '', '', '', '', '32']
Garis yang menyinggung:
['09', '9', '15', '22', '46', '9', '51', '0', '11', '1', '57', '9', '70', '36.3', '0.242', '11.8', '16.2', '6.4', '4.1', '5.8', '31.3', '5.5', '3.9', '6.8', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '', '', '', '', '', '', '', '', '', '', '', '32']
['09', '9', '15', '22', '46', '25', '31', '0', '11', '1', '70', '9', '73', '67.8', '2.196', '10.4', '17.0', '13.4', '4.4', '12.2', '31.8', '15.6', '4.2', '16.2', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '', '', '', '', '', '', '', '', '', '', '', '32']
['09', '9', '15', '22', '46', '28', '41', '0', '11', '1', '70', '5', '22', '7.4', '0.003', '4.0', '13.1', '3.4', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '0.0', '', '', '', '', '', '', '', '', '', '', '', '32']
Seperti yang Anda sarankan, saya akan mencoba membaca file, kemudian memodifikasi DataFrame (mengganti nama kolom, menghapus yang tidak perlu, dll.) Atau cukup gunakan mesin python
(waktu pemrosesan yang lama).
Per penyelidikan lebih lanjut, urutan perintah berikut berfungsi (Saya kehilangan baris pertama data -tidak header=None
sekarang-, tetapi setidaknya itu dimuat):
df = pd.read_csv(filename,
usecols=range(0, 42))
df.columns = ['YR', 'MO', 'DAY', 'HR', 'MIN', 'SEC', 'HUND',
'ERROR', 'RECTYPE', 'LANE', 'SPEED', 'CLASS',
'LENGTH', 'GVW', 'ESAL', 'W1', 'S1', 'W2', 'S2',
'W3', 'S3', 'W4', 'S4', 'W5', 'S5', 'W6', 'S6',
'W7', 'S7', 'W8', 'S8', 'W9', 'S9', 'W10', 'S10',
'W11', 'S11', 'W12', 'S12', 'W13', 'S13', 'W14']
Berikut ini TIDAK berfungsi:
df = pd.read_csv(filename,
names=['YR', 'MO', 'DAY', 'HR', 'MIN', 'SEC', 'HUND',
'ERROR', 'RECTYPE', 'LANE', 'SPEED', 'CLASS',
'LENGTH', 'GVW', 'ESAL', 'W1', 'S1', 'W2', 'S2',
'W3', 'S3', 'W4', 'S4', 'W5', 'S5', 'W6', 'S6',
'W7', 'S7', 'W8', 'S8', 'W9', 'S9', 'W10', 'S10',
'W11', 'S11', 'W12', 'S12', 'W13', 'S13', 'W14'],
usecols=range(0, 42))
CParserError: Error tokenizing data. C error: Expected 53 fields in line 1605634, saw 54
Berikut ini TIDAK berfungsi:
df = pd.read_csv(filename,
header=None)
CParserError: Error tokenizing data. C error: Expected 53 fields in line 1605634, saw 54
ditutup sebagai pertanyaan penggunaan.
dic_df = _create_init_dic ("C: / Users / swati / Downloads / VQA-Med 2018 Dataset / c5e905f7-6eb0-4a98-b284-da0729a1caf3_VQAMed2018Train / VQAMed2018Train / VQAMed2018Train-QA.csv
ParserError: Kesalahan membuat token data. C error: Diharapkan 1 bidang di baris 33, melihat 3
Coba ini:
df = pd.read_csv(filename,header=None,error_bad_lines=False)
Sudah mencobanya dan bekerja untuk kesalahan serupa terima kasih!
coba tambahkan quoting=3
saat dibaca
adakah cara bagi panda untuk mengabaikan bidang ekstra di baris mana pun yang memiliki lebih banyak bidang?
misalnya dalam kasus "Diharapkan 53 bidang di baris 1605634, melihat 54"
itu hanya menjatuhkan bidang 54 di baris 1605634
Kasus lain! tetapi diselesaikan dengan "error_bad_lines = False", itu masih mencetak kesalahan tetapi 'kode keluar 0'
Saya mendapat kesalahan yang sama
Saya hanya menambahkan parameter pembatas dalam mode read_csv
dan itu berhasil
error_bad_lines = Salah
berhasil
pd.read_csv(filename, header=None) gives the following error: CParserError: Error tokenizing data. C error: Expected 53 fields in line 1605634, saw 54
diharapkan karena jumlah kolom disimpulkan dari baris pertama. Jika Anda mengirimkan
names
jika akan menggunakan ini sebagai fitur penentu.Jadi teruslah mencoba berbagai pilihan. Sebenarnya Anda membatasi sedikit dengan
names
danusecols
. Anda mungkin lebih baik membacanya, kemudian mengindeks ulang apa yang Anda butuhkan.
Ini bekerja! Saya menulis csv menggunakan bahasa R dan mencoba membacanya dengan python. Baris pertama harus memiliki panjang maksimal untuk semua baris. Dengan cara ini akan memperbaiki masalah garis buruk dan tidak akan kehilangan garis.
Jika Anda akan mencoba mengimpor file .xlsx menggunakan perintah pd.read_csv, Anda akan mendapatkan kesalahan ini.
Coba gunakan pd.read_excel sebagai ganti pd.read_csv
Cara termudah untuk memperbaikinya adalah dengan mengubah file CSV Anda menjadi file Excel dan menggunakan pd.read_excel alih-alih pd.read_csv untuk membaca data
Komentar yang paling membantu
Coba ini: