UFT-8解码csv文件问题,无法创建pandas df

时间:2017-02-10 01:05:25

标签: python csv pandas encoding utf-8

如果这看起来像重复的帖子,我很抱歉,但我花了2个小时在stackoverflow上搜索并且没有找到解决方案。

我正在将csv文件加载到pandas中,并使用一些列作为我的数据帧。问题是其中一列的名称为°。

如果我从csv手动删除°,我可以加载到pandas没问题。但是,我会有数百个这样的文件,所以手动删除听起来不是很有趣。

这是我收到的错误:

“UnicodeDecodeError:'utf-8'编解码器无法解码位置6中的字节0xb0:无效的起始字节”

# coding: utf-8
import googlemaps
import folium
import pandas as pd
import re

 df = pd.read_csv('{}{}{}'.format(path, filename, '.csv', encoding='utf-8',errors="ignore")) 
                   .rename(columns={'GPS_x[°]': 'lng', 'GPS_y[°]': 'lat',
                   'ELEVATION_FT[Ft]': 'ele_ft'})

我尝试将其编码为latin1 / iso-8859-1但没有成功。我使用Pycharm作为我的IDE,默认文件编码是UTF-8。

我还尝试在notepad ++中打开csv文件并将其编码为UTP-8并保存新文件,仍然会得到相同的错误。我不知道该怎么做

编辑1:回溯(最近一次呼叫最后一次):

File     "myfile.py", line 18, in <module>
df = pd.read_csv('{}{}{}'.format(path, filename, '.csv', errors="ignore")).rename(columns={'GPS_x[°]': 'lng', 'GPS_y[°]': 'lat', 'ELEVATION_FT[Ft]': 'ele_ft'})

File "C:\Users\name\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 645, in parser_f
return _read(filepath_or_buffer, kwds)

File "C:\Users\name\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 388, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)

 File "C:\Users\name\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 729, in __init__
self._make_engine(self.engine)

File "C:\Users\name\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 922, in _make_engine
self._engine = CParserWrapper(self.f, **self.options)

File "C:\Users\name\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\io\parsers.py", line 1389, in __init__
self._reader = _parser.TextReader(src, **kwds)

File "pandas\parser.pyx", line 535, in pandas.parser.TextReader.__cinit__ (pandas\parser.c:6077)

File "pandas\parser.pyx", line 738, in pandas.parser.TextReader._get_header (pandas\parser.c:9215)

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 11: invalid start byte

2 个答案:

答案 0 :(得分:1)

此代码对我有用:

df = pd.read_csv('your.csv',encoding ="latin1")

答案 1 :(得分:0)

你有一些错别字。您将encoding=传递给format(),而不是read_csv(),后来被忽略了。

errors在这里也是错误的,因为read_csv不支持它。

由于记事本++将您的编码报告为ANSI,因此您应使用mbcs作为编解码器。 ANSI表示您所在地区的8位字符集,如Windows-1252(如果您为西欧配置)。 Python中的mbcs使用相同的区域设置进行解码/编码。

df = pd.read_csv('{}{}{}'.format(path, filename, '.csv'), encoding='mbcs').rename(columns={'GPS_x[°]': 'lng', 'GPS_y[°]': 'lat', 'ELEVATION_FT[Ft]': 'ele_ft'})

为了便于阅读,这可能会帮助您更快地找到问题,您应该这样做:

fq_filename = '{}{}{}'.format(path, filename, '.csv')
df = pd.read_csv(fq_filename, encoding='mbcs')
df = df.rename(columns={'GPS_x[°]': 'lng', 'GPS_y[°]': 'lat', 'ELEVATION_FT[Ft]': 'ele_ft'})