直奔主题:把包含中文的csv文件的编码改成utf-8的方法:
https://stackoverflow.com/questions/191359/how-to-convert-a-file-to-utf-8-in-python
啰嗦几句:
在用pandas读取hive导出的csv文件时,经常会遇到类似UnicodeDecodeError: 'gbk' codec can't decode byte 0xa3 in position 12这样的问题,这种问题是因为导出的csv文件包含中文,且这些中文的编码不是gbk,直接用excel打开这些文件还会出现乱码,但用记事本打开这些csv则正常显示,然后用记事本另存为UTF-8之后,用excel打开也能够正常显示,并且用pandas读取时指明encoding='utf-8'也能正常读取了。如果读取批量的csv时,或者csv的行数达到数百万时,就不能通过记事本另存为来更改encoding了,那应该怎么做来保证pandas能正常读取这些csv呢?
1.读取时不加encoding参数,则默认使用gbk编码来读取数据源文件,即默认数据源文件的编码为gbk:
import pandas as pd df=pd.read_csv(data_source_file)
2.如果源文件的中文不是gbk编码,则可能会报错:
UnicodeDecodeError: 'gbk' codec can't decode byte 0xa3 in position 12
那么可以试试utf-8编码:
df=pd.read_csv(data_source_file,encoding='utf-8')
如果仍然报错,提示utf-8也不行:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xa3 in position 12
那么说明文件中的中文编码不是utf-8,这时我们就要确定源文件的中文到底使用哪一种编码。
3.常见的中文编码包括:utf-8,gbk,gb2312,gb18030,cp935,big5等,我们可以逐一试过去,确定之后再修改read_csv()的encoding参数值即可。
4.如果只需要读取一个csv文件,逐个试的方法是可行的,但是如果需要循环读取多个csv文件,而每个csv文件的编码都可能不一样,那么最好还是先把所有这些csv统一转为utf-8,再集中进行读取,转换文件的编码格式需要用到