2017-06-20 104 views
0

我知道类似的问题已经被问到,我已经看过所有这些问题,帮帮我。我正在使用OSX 10.11 El Capitan,python3.6。,虚拟环境,也没有尝试过。我正在使用jupyter笔记本和spyder3。UnicodeDecodeError:'utf-8'编码解码器无法解码位置1中的字节0x8b:无效的起始字节,同时读取pandas中的csv文件

我是新来的蟒蛇,但要知道基本的ML和以下后,以了解如何解决Kaggle挑战:Link to BlogLink to Data Set

。我是停留在代码的前几行 `

import pandas as pd 

destinations = pd.read_csv("destinations.csv") 
test = pd.read_csv("test.csv") 
train = pd.read_csv("train.csv") 

,它是给我的错误

UnicodeDecodeError      Traceback (most recent call last) 
<ipython-input-19-a928a98eb1ff> in <module>() 
     1 import pandas as pd 
----> 2 df = pd.read_csv('destinations.csv', compression='infer',date_parser=True, usecols=([0,1,3])) 
     3 df.head() 

/usr/local/lib/python3.6/site-packages/pandas/io/parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, escapechar, comment, encoding, dialect, tupleize_cols, error_bad_lines, warn_bad_lines, skipfooter, skip_footer, doublequote, delim_whitespace, as_recarray, compact_ints, use_unsigned, low_memory, buffer_lines, memory_map, float_precision) 
    653      skip_blank_lines=skip_blank_lines) 
    654 
--> 655   return _read(filepath_or_buffer, kwds) 
    656 
    657  parser_f.__name__ = name 

/usr/local/lib/python3.6/site-packages/pandas/io/parsers.py in _read(filepath_or_buffer, kwds) 
    403 
    404  # Create the parser. 
--> 405  parser = TextFileReader(filepath_or_buffer, **kwds) 
    406 
    407  if chunksize or iterator: 

/usr/local/lib/python3.6/site-packages/pandas/io/parsers.py in __init__(self, f, engine, **kwds) 
    762    self.options['has_index_names'] = kwds['has_index_names'] 
    763 
--> 764   self._make_engine(self.engine) 
    765 
    766  def close(self): 

/usr/local/lib/python3.6/site-packages/pandas/io/parsers.py in _make_engine(self, engine) 
    983  def _make_engine(self, engine='c'): 
    984   if engine == 'c': 
--> 985    self._engine = CParserWrapper(self.f, **self.options) 
    986   else: 
    987    if engine == 'python': 

/usr/local/lib/python3.6/site-packages/pandas/io/parsers.py in __init__(self, src, **kwds) 
    1603   kwds['allow_leading_cols'] = self.index_col is not False 
    1604 
-> 1605   self._reader = parsers.TextReader(src, **kwds) 
    1606 
    1607   # XXX 

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader.__cinit__ (pandas/_libs/parsers.c:6175)() 

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._get_header (pandas/_libs/parsers.c:9691)() 

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

一些答案上stakoverflow认为,这是因为它我但是Chrome下载了.csv文件,并且.csv.gz无处可见,并且返回了文件未找到的错误。

然后我读的地方使用encoding='latin1',但这样做后,我得到解析器的错误:

--------------------------------------------------------------------------- 
ParserError        Traceback (most recent call last) 
<ipython-input-21-f9c451f864a2> in <module>() 
     1 import pandas as pd 
     2 
----> 3 destinations = pd.read_csv("destinations.csv",encoding='latin1') 
     4 test = pd.read_csv("test.csv") 
     5 train = pd.read_csv("train.csv") 

/usr/local/lib/python3.6/site-packages/pandas/io/parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, escapechar, comment, encoding, dialect, tupleize_cols, error_bad_lines, warn_bad_lines, skipfooter, skip_footer, doublequote, delim_whitespace, as_recarray, compact_ints, use_unsigned, low_memory, buffer_lines, memory_map, float_precision) 
    653      skip_blank_lines=skip_blank_lines) 
    654 
--> 655   return _read(filepath_or_buffer, kwds) 
    656 
    657  parser_f.__name__ = name 

/usr/local/lib/python3.6/site-packages/pandas/io/parsers.py in _read(filepath_or_buffer, kwds) 
    409 
    410  try: 
--> 411   data = parser.read(nrows) 
    412  finally: 
    413   parser.close() 

/usr/local/lib/python3.6/site-packages/pandas/io/parsers.py in read(self, nrows) 
    1003     raise ValueError('skipfooter not supported for iteration') 
    1004 
-> 1005   ret = self._engine.read(nrows) 
    1006 
    1007   if self.options.get('as_recarray'): 

/usr/local/lib/python3.6/site-packages/pandas/io/parsers.py in read(self, nrows) 
    1746  def read(self, nrows=None): 
    1747   try: 
-> 1748    data = self._reader.read(nrows) 
    1749   except StopIteration: 
    1750    if self._first_chunk: 

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader.read (pandas/_libs/parsers.c:10862)() 

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._read_low_memory (pandas/_libs/parsers.c:11138)() 

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._read_rows (pandas/_libs/parsers.c:11884)() 

pandas/_libs/parsers.pyx in pandas._libs.parsers.TextReader._tokenize_rows (pandas/_libs/parsers.c:11755)() 

pandas/_libs/parsers.pyx in pandas._libs.parsers.raise_parser_error (pandas/_libs/parsers.c:28765)() 

ParserError: Error tokenizing data. C error: Expected 2 fields in line 11, saw 3 

我花了几个小时来调试这一点,试图打开原子上的CSV文件(没有其他的应用程序可能打开它),在线网络应用程序(一些崩溃),但没有帮助。我已经尝试使用已解决问题的其他人的内核,但没有帮助。

+1

什么是分隔符? –

+0

我不知道。我对所有这些都是新手。我只是下载了数据集,并且试图执行这些代码行,但遇到了一个错误。我不知道如何知道分隔符,我提到了顶部的链接,也许你可以找到。谢谢 –

回答

2

它仍然最有可能的gzip压缩数据。 gzip的幻数是0x1f 0x8b,这与您得到的UnicodeDecodeError一致。

你可以尝试解压缩在飞行中的数据:

with open('destinations.csv', 'rb') as fd: 
    gzip_fd = gzip.GzipFile(fileobj=fd) 
    destinations = pd.read_csv(gzip_fd) 
+0

谢谢!它工作。但我想知道为什么它发生在我身上,其他人这样做没有得到错误。喜欢看一个提交:https://www.kaggle.com/benjaminabel/pandas-version-of-most-popular-hotels –

+0

我会认为提交只适用于已经解压缩的输入文件。 – dorian

+0

但我的文件显示.csv扩展名与chrome下载的相同。那么它怎么可能被压缩?它不应该是.csv.gz吗? –

0

你可以尝试使用的编解码器

import codecs 
with codecs.open("destinations.csv", "r",encoding='utf-8', errors='ignore') as file_dat: 
    destinations = pd.read_csv(file_data)) 
+0

我试过但得到错误:ParserError:错误标记数据。 C错误:预计在11行中的2个字段,看到3 –

相关问题