Pandas | read_csv各種報錯解決辦法
在使用pandas讀入csv文件時,有如下幾種常見錯誤類型:
- 路徑錯誤:文件名中存在中文名或轉義字元
- 數據格式錯誤:由於欄位中存在分隔符逗號,導致數據串列
- 編碼錯誤:讀取文件的解碼模式不同於文件編碼格式。例如文件使用utf-8編碼,讀取時指定編碼格式為gbk。文本中存在一些特殊字元超出了解碼範圍,例如生僻繁體字或日文
通常報錯為:
FileNotFoundError: File b../數據.csv does not exist
gbk/utf-8 codec cant decode byte 0xa2 in position 147: illegal multibyte sequence
Error tokenizing data. C error: Expected 3 fields in line 3, saw 5
解決方法
- 當文件名存在中文和轉義字元時,前面加上u或者r指定字元串編碼,並且盡量避免使用中文作為文件名
# False
data = pd.read_csv(u./數據.csv)
# Right
data = pd.read_csv(u./data.csv)
2. 文件解碼格式存在錯誤時,查看源文件編碼或更換幾個常用編碼格式讀取試試。
for i in (gbk,utf-8,gb18030,ansi):
try:
data = pd.read_csv(./data.csv,encoding = i)
print(i + decode success)
except:
print(i + decode fail)
3.當文件僅有很少的行出現錯誤時,如數據不是太重要,可選擇跳過錯誤的行。
#跳過錯誤的行
data = pd.read_csv(./data.csv,error_bad_lines = False)
with open(./data.csv,r) as file:
rows = len(file.readlines())-1
#列印跳過的行數
print(len(data)-rows)
4. 在寫入文件時,使用在未在欄位中出現的符號作為分隔符!!!使用在未在欄位中出現的符號作為分隔符!!!使用在未在欄位中出現的符號作為分隔符!!!
由於逗號引號等符號容易出現在json子串中如{"姓名":"老吳","職業":"歌手","興趣":"hiphop"},建議使用Tab(/t)等生僻符號進行分隔