2015-06-13 1 views
0

Я импортирую таблицу excel из http://www.gapminder.org/data/ Затем я хочу переключать столбцы и строки таблицы. И это ошибка я получаю: «UnicodeDecodeError:„ASCII“кодек не может декодировать байт 0xC3 в позиции 23389: порядковый не в диапазоне (128)»Получение UnicodeDecodeError при переносе DataFrame в iPython

Я пытался кодировать/декодировать DataFrame с DataFrame .decode ('utf-8'), но он говорит, что DataFrame не имеет такого атрибута.

Ошибка возникает, потому что транспонирование не может преобразовать некоторые данные в ascii. Это правильно? Но зачем нам это делать, когда моя таблица - чистые цифры?

Большое вам спасибо.

есть больше информации об ошибке:

--------------------------------------------------------------------------- 
UnicodeDecodeError      Traceback (most recent call last) 
<ipython-input-190-a252f2a45657> in <module>() 
     1 #your code here 
     2 countries = countries.transpose() 
----> 3 income.transpose() 
     4 #income = income.decode('utf-8') 
     5 #content = content.decode('utf-8') 

/Users/Sergey/anaconda/lib/python2.7/site-packages/IPython/core/displayhook.pyc in __call__(self, result) 
    236     self.write_format_data(format_dict, md_dict) 
    237     self.log_output(format_dict) 
--> 238    self.finish_displayhook() 
    239 
    240  def cull_cache(self): 

/Users/Sergey/anaconda/lib/python2.7/site-packages/IPython/kernel/zmq/displayhook.pyc in finish_displayhook(self) 
    70   sys.stderr.flush() 
    71   if self.msg['content']['data']: 
---> 72    self.session.send(self.pub_socket, self.msg, ident=self.topic) 
    73   self.msg = None 
    74 

/Users/Sergey/anaconda/lib/python2.7/site-packages/IPython/kernel/zmq/session.pyc in send(self, stream, msg_or_type, content, parent, ident, buffers, track, header, metadata) 
    647   if self.adapt_version: 
    648    msg = adapt(msg, self.adapt_version) 
--> 649   to_send = self.serialize(msg, ident) 
    650   to_send.extend(buffers) 
    651   longest = max([ len(s) for s in to_send ]) 

/Users/Sergey/anaconda/lib/python2.7/site-packages/IPython/kernel/zmq/session.pyc in serialize(self, msg, ident) 
    551    content = self.none 
    552   elif isinstance(content, dict): 
--> 553    content = self.pack(content) 
    554   elif isinstance(content, bytes): 
    555    # content is already packed, as in a relayed message 

/Users/Sergey/anaconda/lib/python2.7/site-packages/IPython/kernel/zmq/session.pyc in <lambda>(obj) 
    83 # disallow nan, because it's not actually valid JSON 
    84 json_packer = lambda obj: jsonapi.dumps(obj, default=date_default, 
---> 85  ensure_ascii=False, allow_nan=False, 
    86) 
    87 json_unpacker = lambda s: jsonapi.loads(s) 

/Users/Sergey/anaconda/lib/python2.7/site-packages/zmq/utils/jsonapi.pyc in dumps(o, **kwargs) 
    38   kwargs['separators'] = (',', ':') 
    39 
---> 40  s = jsonmod.dumps(o, **kwargs) 
    41 
    42  if isinstance(s, unicode): 

/Users/Sergey/anaconda/lib/python2.7/json/__init__.pyc in dumps(obj, skipkeys, ensure_ascii, check_circular, allow_nan, cls, indent, separators, encoding, default, sort_keys, **kw) 
    248   check_circular=check_circular, allow_nan=allow_nan, indent=indent, 
    249   separators=separators, encoding=encoding, default=default, 
--> 250   sort_keys=sort_keys, **kw).encode(obj) 
    251 
    252 

/Users/Sergey/anaconda/lib/python2.7/json/encoder.pyc in encode(self, o) 
    208   if not isinstance(chunks, (list, tuple)): 
    209    chunks = list(chunks) 
--> 210   return ''.join(chunks) 
    211 
    212  def iterencode(self, o, _one_shot=False): 

UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 23389: ordinal not in range(128) 

После того как я провел 40 мин на нем, проблема решается сама, и я понятия не имею, как это сделать. Единственное, что я сделал, я добавил этот код:

#encoding=utf8 
import sys 
reload(sys) 
sys.setdefaultencoding('utf8') 

Но тогда, когда я удаляю этот мир, он все еще работает. Кто-нибудь знает, почему? Спасибо!!!!

ответ

0

Это немного трудно ответить авторитетно, не более конкретных знаний о вашей IPython сессии, но вот некоторые образованные догадок:

Как почему вы получите эту ошибку, даже если ваши данные все числовые, наиболее вероятно, из одной из индексных меток (которые предположительно содержат некоторый текст).

А почему он все еще работает, когда вы удалите этот код, если вы работаете в IPython ноутбук, то, как только вы запустите установку кодировку по умолчанию в UTF-8 код, который не устанавливая остается в силе до тех пор, как

  • какой-то другой код выполняется, который изменяет настройку или
  • перезапуске питона ядро ​​
+0

Когда вы говорите, один из лейблов, вы имеете в виду один из ячейки данных может содержать текст? Это огромный кадр данных, я не думаю, что смогу вручную найти ячейку, которая вызывает ошибку. Но мне любопытно, что буквально то, что содержит эта ячейка, составляет 234 вместо 234. Правильно ли это? – Sergey

+0

Я имел в виду, что я думал, что это, вероятно, символ не-ascii в одном из имен строк или столбцов. – tegancp

Смежные вопросы