Подтвердить что ты не робот

UnicodeDecodeError: ('utf-8' codec) при чтении файла csv

что я пытаюсь читать csv, чтобы сделать dataframe --- вносить изменения в столбец --- снова обновлять/отражать измененное значение в том же csv (to_csv) - снова пытается прочитать это csv, чтобы создать другой фрейм...что я получаю сообщение об ошибке

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 7: invalid continuation byte

мой код

 import pandas as pd
 df = pd.read_csv("D:\ss.csv")
 df.columns  #o/p is Index(['CUSTOMER_MAILID', 'False', 'True'], dtype='object')
 df['True'] = df['True'] + 2     #making changes to one column of type float
 df.to_csv("D:\ss.csv")       #updating that .csv    
 df1 = pd.read_csv("D:\ss.csv")   #again trying to read that csv

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe7 in position 7: invalid continuation byte

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

Я знаю, что где-то я пропускаю "encode = некоторый тип кодека" или "decode = some type" при чтении и записи в csv.

Но я не знаю, что именно нужно изменить. Также нужна помощь.

4b9b3361

Ответ 1

Известная кодировка

Если вы знаете кодировку файла, который хотите прочитать, вы можете использовать

pd.read_csv('filename.txt', encoding='encoding')

Это возможные кодировки: https://docs.python.org/3/library/codecs.html#standard-encodings

Неизвестная кодировка

Если вы не знаете кодировку, вы можете попробовать использовать chardet, однако это не гарантируется. Это более угадающая работа.

import chardet
import pandas as pd

with open('filename.csv', 'rb') as f:
    result = chardet.detect(f.read())  # or readline if the file is large


pd.read_csv('filename.csv', encoding=result['encoding'])

Ответ 2

Одно простое решение - вы можете открыть файл csv в редакторе, таком как Sublime Text, и сохранить его с помощью кодировки "utf-8". Затем мы можем легко прочитать файл через pandas.

Ответ 3

Произошла ли эта ошибка при первом просмотре данных или втором чтении после того, как вы записали его и снова прочитали? Я предполагаю, что это действительно происходит при первом чтении данных, потому что ваш CSV имеет кодировку, которая не является UTF-8.

Попробуйте открыть этот файл CSV в Notepad ++ или Excel или LibreOffice. Имеется ли в вашем источнике данных символ ç (C cedilla)? Если это так, то этот 0xE7 байт, который вы видите, вероятно, закодирован в латинском-1 или Windows-1252 (называемый "cp1252" в Python).

Посмотрев документацию для функции Pandas read_csv(), я вижу, что она имеет параметр encoding, который должен быть имя кодировки, вы ожидаете, что файл CSV будет включен. Поэтому попробуйте добавить encoding="cp1252" к вашему вызову read_csv() следующим образом:

df = pd.read_csv(r"D:\ss.csv", encoding="cp1252")

Обратите внимание, что я добавил символ r перед именем файла, так что он будет считаться "необработанной строкой", а обратная косая черта не будет обрабатываться специально. Таким образом, вы не получаете удивления, когда вы меняете имя файла с ss.csv на new-ss.csv, где строка D:\new-ss.csv будет считана как D, :, символ новой строки, e, w и т.д.

В любом случае попробуйте этот параметр кодирования при первом вызове read_csv() и посмотрите, работает ли он. (Это только предположение, поскольку я не знаю ваших фактических данных. Если файл данных не является частным и не слишком велик, попробуйте опубликовать файл данных, чтобы мы могли видеть его содержимое - это позволило бы нам сделать лучше чем просто угадать.)

Ответ 4

Да, вы получите эту ошибку. Я столкнулся с этой проблемой, открыв файл csv в блокноте ++ и изменив кодировку в меню Encoding → конвертировать в UTF-8. Затем сохраните файл. Затем снова запустите программу python над ней.

Другое решение использует модуль кодеков в python для кодирования-декодирования файлов. Я не использовал это.

Ответ 5

Я новичок в python. Исправлена ​​эта точная проблема, когда я вручную изменил расширение на свой файл excel на .csv и попытался прочитать его с помощью read_csv. Однако, если я открыл файл excel и сохранил его как файл csv, он, похоже, сработал.

Ответ 6

Вышеуказанный метод, используемый при импорте и последующем обнаружении работы типа файла import chardet

with open('filename.csv', 'rb') as f:
    result = chardet.detect(f.read())  # or readline if the file is large


pd.read_csv('filename.csv', encoding=result['encoding'])