4 個Python數據讀取的常見錯誤

read_csv()是python數據分析包pandas裏面使用頻次較高的函數之一。它包括的參數差不多20個,可能一開始未必需要完整知道每個參數作用。不過,隨着使用的深入,實際數據環境愈發複雜,處理的數據上億行後,就會出現這樣那樣的問題,這樣催促我們反過頭來再去理解某些參數的作用。

今天,總結平時使用read_csv(),經常遇到的幾個問題。

1、UnicodeDecodeError

在這裏插入圖片描述
read_csv 默認讀入文件的編碼格式爲:utf-8,如果讀入文件無法被utf-8編碼,就會報上面的錯誤。

可是我們怎麼知道讀入文件的編碼格式呢?今天,爲大家介紹一個這方面的包:chardet,它能返回文件的編碼格式。使用前先用pip install chardet,安裝一下。 接下里這樣編寫返回編碼格式,file爲讀入的文件名稱。

在這裏插入圖片描述
通過charadet包分析出文件的編碼格式後,不管使用 python原生的open, read,還是pandas的read_csv,都可以傳入給參數encoding.

2、 sep分隔符

常見文件的分隔符,比如 , \t, csv文件默認爲逗號,不過常用的大數據庫,比如hive,有時會使用分隔符爲\t,這時候就需要調整參數sep. 這類錯誤比較好解決。

3、讀取文件時遇到和列數不對應的行,此時會報錯

尤其在讀入文件爲上億行的,快讀完時,突然報出這個錯,此行解析出的字段個數與之前行列數不匹配。
此時,需要調整一個參數:error_bad_lines爲false,意思是忽略此行。

pandas.read_csv(***,error_bad_lines=False)

實際項目,讀入的文件數據環境比我們預想的複雜。假設我們的數據文件默認分隔符爲逗號,然後如果某行的某個單元格取值爲:

'山東省, 濰坊市, 青州市'

就光這一個單元格,就會解析出多列,報錯那也是自然的,這就要求我們在讀入之前對數據做好充分的清洗。

4、EOF inside string starting at line 錯誤

這個錯誤在讀入文件時,經常也會出現。這類錯誤需要修改 quoting參數。

df = pd.read_csv(csvfile, quoting=csv.QUOTE_NONE )

默認取值爲0,遇到錯誤時,可以根據文檔調整。在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章