您好,登錄后才能下訂單哦!
小編這次要給大家分享的是Pandas中read_csv()讀取文件跳過報錯行怎么辦,文章內容豐富,感興趣的小伙伴可以來了解一下,希望大家閱讀完這篇文章之后能夠有所收獲。
讀取文件時遇到和列數不對應的行,此時會報錯。若報錯行可以忽略,則添加以下參數:
樣式:
pandas.read_csv(***,error_bad_lines=False)
pandas.read_csv(filePath) 方法來讀取csv文件時,可能會出現這種錯誤:
ParserError:Error tokenizing data.C error:Expected 2 fields in line 407,saw 3.
是指在csv文件的第407行數據,期待2個字段,但在第407行實際發現了3個字段。
原因:header只有兩個字段名,但數據的第407行卻出現了3個字段(可能是該行數據包含了逗號,或者確實有三個部分),導致pandas不知道該如何處理。
解決辦法:把第407行多出的字段刪除,或者通過在read_csv方法中設置error_bad_lines=False來忽略這種錯誤:
改為
pandas.read_csv(filePath,error_bad_lines=False)
來忽略掉其中出現錯亂(例如,由于逗號導致多出一列)的行。
KeyError錯誤:
報這種錯是由于使用了DataFrame中沒有的字段,例如id字段,原因可能是:
.csv文件的header部分沒加逗號分割,此時可使用df.columns.values來查看df到底有哪些字段:
print(df.columns.values)
.在操作DataFrame的過程中丟掉了id字段的header,卻沒發現該字段已丟失。
例如:
df=df[df['id']!='null']#取得id字段不為null的行
df=df['id']#賦值后df為Series,表示df在id列的值,而不再是一個DataFrame,于是丟掉了id的頭,此時若再使用df['id']將報錯。
取列的值,與取列的區別:
df=df['id']#取id列的值,賦值后df為Series類型,可用print(type(df))來查看其類型
df=df[['id']]#只取df的id列作為一個新的DataFrame,賦值后df仍然是一個DataFrame
df=df[['id','age']]#取df的id和age列作為一個新的DataFrame,賦值后df仍然是一個DataFrame
過濾行
df=df[df['id']!='null']#過濾掉id字段取值為'null'的行
注意,此處的'null'是一個字符串,若df中某行id字段的值不是字符串型,或者為空,將報TypeError:invalid type comparison錯,因為只有相同類型的值才能進行比較。
解決辦法:如果不能保證id列都是string類型,則需要去掉該過濾條件。
補充知識:pandas 使用read_csv讀取文件時產生錯誤:EOF inside string starting at line
解決方法:使用參數 quoting
df = pd.read_csv(csvfile, header = None, delimiter="\t", quoting=csv.QUOTE_NONE, encoding='utf-8')
看完這篇關于Pandas中read_csv()讀取文件跳過報錯行怎么辦的文章,如果覺得文章內容寫得不錯的話,可以把它分享出去給更多人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。