Кодирование данных в utf-8 до использования pandas.read_csv? [Дубликат]

for (var key in validation_messages) {
    // skip loop if the property is from prototype
    if (!validation_messages.hasOwnProperty(key)) continue;

    var obj = validation_messages[key];
    for (var prop in obj) {
        // skip loop if the property is from prototype
        if(!obj.hasOwnProperty(prop)) continue;

        // your code
        alert(prop + " = " + obj[prop]);
    }
}
152
задан Stefan 11 January 2016 в 01:25
поделиться

4 ответа

read_csv принимает параметр encoding для работы с файлами в разных форматах. В основном я использую read_csv('file', encoding = "ISO-8859-1") или, альтернативно, encoding = "utf-8" для чтения, и вообще utf-8 для to_csv.

Вы также можете использовать псевдоним 'latin1' вместо 'ISO-8859-1'.

См. соответствующую документацию Pandas , примеры python docs в файлах csv и множество связанных вопросов здесь на SO.

369
ответ дан mjosh 24 August 2018 в 08:00
поделиться

Борясь с этим некоторое время и думал, что я опубликую по этому вопросу, поскольку это первый результат поиска. Добавление тега encoding = 'iso-8859-1 "в pandas read_csv не сработало, и не было никакой другой кодировки, продолжавшей давать UnicodeDecodeError.

Если вы передаете дескриптор файла в pd.read_csv (), вам нужно поместить атрибут encoding = в файл открытым, а не в read_csv. Очевидное в ретроспективе, но тонкая ошибка для отслеживания.

1
ответ дан J. Ternent 24 August 2018 в 08:00
поделиться

Самый простой из всех решений:

  • Откройте файл csv в Sublime text editor .
  • Сохраните файл в формате utf-8.

В возвышенном виде щелкните Файл -> Сохранить с кодировкой -> UTF-8

Затем вы можете прочитать свой файл, как обычно:

import pandas as pd
data = pd.read_csv('file_name.csv', encoding='utf-8')

EDIT 1:

Если есть много файлов, вы можете пропустить возвышенный шаг.

Просто прочитайте файл, используя

data = pd.read_csv('file_name.csv', encoding='utf-8')

и другие различные типы кодирования:

encoding = "cp1252"
encoding = "ISO-8859-1"
13
ответ дан Pang 24 August 2018 в 08:00
поделиться

Pandas позволяет указывать кодировку, но не позволяет игнорировать ошибки, чтобы не автоматически заменять оскорбительные байты. Таким образом, нет одного размера, соответствующего всем методам, но по-разному в зависимости от фактического варианта использования.

  1. Вы знаете кодировку, и в файле нет ошибки кодирования , Отлично: вам нужно просто указать кодировку:
    file_encoding = 'cp1252'        # set file_encoding to the file encoding (utf8, latin1, etc.)
    pd.read_csv(input_file_and_path, ..., encoding=file_encoding)
    
  2. Вы не хотите беспокоиться о вопросах кодирования и хотите, чтобы этот проклятый файл загружался, независимо от того, содержат ли какие-то текстовые поля мусор. Хорошо, вам нужно использовать кодировку Latin1, потому что она принимает любой возможный байт как вход (и преобразует его в символ Юникода того же кода):
    pd.read_csv(input_file_and_path, ..., encoding='latin1')
    
  3. Вы знаете, что большая часть файла написанный с определенным кодированием, но также содержит ошибки кодирования. Пример реального мира - это файл UTF8, который был отредактирован с помощью редактора un utf8 и который содержит некоторые строки с другой кодировкой. Pandas не предусматривает специальной обработки ошибок, но функция Python open имеет (предполагая Python3), а read_csv принимает файл, подобный объекту. Типичными параметрами ошибок, которые следует использовать здесь, являются 'ignore', которые просто подавляют оскорбительные байты или (ИМХО лучше) 'backslashreplace', который заменяет оскорбительные байты их защитой от обратного сбрасывания Python:
    file_encoding = 'utf8'        # set file_encoding to the file encoding (utf8, latin1, etc.)
    input_fd = open(input_file_and_path, encoding=file_encoding, errors = 'backslashreplace')
    pd.read_csv(input_fd, ...)
    
0
ответ дан Serge Ballesta 24 August 2018 в 08:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: