Python編碼格式導致的csv讀取錯誤(pandas.read_csv)
本文記錄python小白我今天遇到的這兩個問題(csv.reader和pandas.csv_read):
- pandas模塊“CParserError: Error tokenizing data. C error: Expected 1 fields in line 4, saw 2”錯誤
- csv模塊“line contains NULL byte”錯誤
今天處理數據時疏忽了,而且還偷懶把數據復制到xlsx保存后,直接修改文件后綴成.csv准備用來讀取。之后運行算法要讀數據的時候果然問題來了。
import pandas as pd
path = 'water30.csv'
df=pd.read_csv(path)
- 1
- 2
- 3
- 4
注:后兩行可寫作df=pd.read_csv('water30.csv')
。但由於read_csv本身有好多參數(雖然這里不用), 故寫成path習慣好些。
這樣會報錯CParserError: Error tokenizing data. C error: Expected 1 fields in line 4, saw 2
我在網上查了好多種解決辦法,由於read_csv的參數很多,所以各有其詞,我這里遇到的應該也只是其中一種,久尋無果。直到我看到這里說看了模塊_csv.c的代碼后,發現文件里不能有 “\0”, 所以csv文件不可以是unicode編碼的,可以是ANSI。
針對我直接改后綴名的結果是,點擊那個.csv打開時就已經提示我:
也就是這里改后綴並沒有把文件格式弄好。所以我選擇“另存為”改選了文件格式為之后,讀取就不會報錯了。
注:有個疑問沒有解決,就是那個我“直接改后綴得到的那個.csv”我用記事本打開查看了一下,編碼就是ANSI啊。那我就不知道為什么報錯了……不過問題倒是暫時解決了。
現在讀取到的格式為是個結構體。