日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無(wú)先后,達(dá)者為師

網(wǎng)站首頁(yè) 編程語(yǔ)言 正文

python編碼格式導(dǎo)致csv讀取錯(cuò)誤問(wèn)題(csv.reader,?pandas.csv_read)_python

作者:ThitherShore ? 更新時(shí)間: 2022-07-03 編程語(yǔ)言

python編碼格式導(dǎo)致csv讀取錯(cuò)誤

本文記錄python小白我今天遇到的這兩個(gè)問(wèn)題(csv.reader和pandas.csv_read):

pandas模塊“CParserError: Error tokenizing data. C error: Expected 1 fields in line 4, saw 2”錯(cuò)誤

csv模塊“l(fā)ine contains NULL byte”錯(cuò)誤

今天處理數(shù)據(jù)時(shí)疏忽了,而且還偷懶把數(shù)據(jù)復(fù)制到xlsx保存后,直接修改文件后綴成.csv準(zhǔn)備用來(lái)讀取。之后運(yùn)行算法要讀數(shù)據(jù)的時(shí)候果然問(wèn)題來(lái)了。

import pandas as pd
path = 'water30.csv'
df=pd.read_csv(path)

注:后兩行可寫(xiě)作df=pd.read_csv('water30.csv')。

但由于read_csv本身有好多參數(shù)(雖然這里不用), 故寫(xiě)成path習(xí)慣好些。

這樣會(huì)報(bào)錯(cuò)CParserError: Error tokenizing data. C error: Expected 1 fields in line 4, saw 2

我在網(wǎng)上查了好多種解決辦法,由于read_csv的參數(shù)很多,所以各有其詞,我這里遇到的應(yīng)該也只是其中一種,久尋無(wú)果。直到我看到這里說(shuō)看了模塊_csv.c的代碼后,發(fā)現(xiàn)文件里不能有 “\0”, 所以csv文件不可以是unicode編碼的,可以是ANSI。

針對(duì)我直接改后綴名的結(jié)果是,點(diǎn)擊那個(gè).csv打開(kāi)時(shí)就已經(jīng)提示我:


也就是這里改后綴并沒(méi)有把文件格式弄好。所以我選擇“另存為”改選了文件格式為

之后,讀取就不會(huì)報(bào)錯(cuò)了。

注:有個(gè)疑問(wèn)沒(méi)有解決,就是那個(gè)我“直接改后綴得到的那個(gè).csv”我用記事本打開(kāi)查看了一下,編碼就是ANSI啊。那我就不知道為什么報(bào)錯(cuò)了……不過(guò)問(wèn)題倒是暫時(shí)解決了。

現(xiàn)在讀取到的格式為

是個(gè)結(jié)構(gòu)體。

另外,對(duì)于:csv模塊“l(fā)ine contains NULL byte”錯(cuò)誤。和上面出現(xiàn)問(wèn)題原因和解決方案是一樣的,比如

import csv
csvfile=file('water30.csv','rb')
reader = csv.reader(csvfile)
for line in reader:
     print line
csvfile.close()

報(bào)錯(cuò):Error: line contains NULL byte

修正后,讀入的數(shù)據(jù)格式為list,如下

[‘1’, ‘2’, ‘2’, ‘1’, ‘2’]
[‘1’, ‘1’, ‘1’, ‘2’, ‘2’]
[‘1’, ‘2’, ‘1’, ‘1’, ‘1’]
[‘1’, ‘1’, ‘1’, ‘1’, ‘2’]
[‘1’, ‘1’, ‘1’, ‘2’, ‘2’]
[‘1’, ‘1’, ‘1’, ‘2’, ‘2’]
[‘0.697’, ‘0.744’, ‘0.634’, ‘0.403’, ‘0.481’]
[‘0.46’, ‘0.376’, ‘0.264’, ‘0.237’, ‘0.149’]
[‘1’, ‘1’, ‘1’, ‘1’, ‘1’]

pandas讀取csv常見(jiàn)錯(cuò)誤及解決

1)第一種錯(cuò)誤

錯(cuò)誤提示:

pandas.errors.ParserError: Error tokenizing data. C error: Expected 1 fields in line 121, saw 2

解決方法:

import pandas as pd
data = pd.read_csv(inputfile, encoding='utf-8',header=None,sep = '\t')

2)第二種錯(cuò)誤

錯(cuò)誤提示:

pandas.errors.ParserError: Error tokenizing data. C error: EOF inside string starting at line 15945

解決方法:

import pandas as pd
import csv
df = pd.read_csv(csvfile, quoting=csv.QUOTE_NONE, encoding='utf-8')

原文鏈接:https://blog.csdn.net/thither_shore/article/details/52338324

欄目分類(lèi)
最近更新