Pandas read_csv() выдает ошибку ParserError: Error tokenizing data. C error: EOF inside string

В обработке файлов получаю их из разных источников и разных кодировок. Поэтому в цикле перебираю возможные кодировки из списка en_codings = ['utf-8', "cp1250", "cp1251", "cp1252", "latin1", "utf-8-sig"] и работаю с той, при которой чтение произошло.

Параметры задачи позволяют пропускать "сбойные строки", поэтому использую параметр on_bad_lines="skip" в моем pandas версии 1.4.2. И большинство файлов обрабатываются хоть как то. Иногда встречаются "оборванный" файл, где в последней строке не все элементы. Тогда, несмотря на on_bad_lines="skip" выдается ошибка ParserError: Error tokenizing data. C error: EOF inside string starting at row 4390, хотя по моему разумению ее просто нужно было пропустить...

Файл прилагается: csv файл. Но вот так выглядит последние строки:

введите сюда описание изображения

Как видно, последняя строчка оборвана.

Хотелось бы найти комбинацию параметров pandas.read_csv(), которая пропускала бы такой вариант плохой строчки. Повторюсь - проблема в том, что она последняя.... такие же строчки в середине файла нормально пропускаются.
Ах да - Windows10.

Добавлено. Проблема локализуется тем, что символ конца файла попался после открытой кавычки, которая инициировала новое поле. Если кавычку ручками поставить -- то файл считывается.


Ответы (3 шт):

Автор решения: CrazyElf

На английском SO предлагают добавить такие опции (попробуйте и по отдельности и вместе):

quoting=3, error_bad_lines=False

Фактически 3 - это csv.QUOTE_NONE, но чтобы писать в таком виде нужно подключать дополнительный модуль import csv, после этого можно писать в более понятном виде quoting=csv.QUOTE_NONE.

→ Ссылка
Автор решения: Namerek
import csv
import pandas as pd


with open('data.csv', 'r', encoding='utf-8') as file:
    reader = csv.DictReader(file)
    df = pd.DataFrame(reader)
→ Ссылка
Автор решения: Vasyl Kolomiets

Нашел такое решение после наводящего ответа @Namerek.

pandas.read_csv - имеет параметр engine По умолчанию он принят как С. Если установить python мой файл файл проходит.

Итак, решение выглядит так:

                readed_into_df = pd.read_csv(
                    str(file_name),
                    sep=separator,
                    encoding=en_coding,
                    on_bad_lines="skip",
                    engine='python',
                )

Главным в этом решении было добавление нового прараметра engine='python' .

Обновление. Признаю решение за вариантом @Namerek. На мелких файлах мой вариант неплох. Но на 1.5Гб чтение затянулось на 40+ минут. Все из за того, что парсится то Python кодом эти 5млн строк...
А вот трюк со чтением в словарь модулем csv справляется за минуту.
Так что - благодарю!!

→ Ссылка