Pandas read_csv - Как обрабатывать запятую в двойных кавычках, которые сами находятся в двойных кавычках - PullRequest
0 голосов
/ 10 декабря 2018

Это не тот же вопрос, что и элементы в двойных кавычках в csv не читаются с пандами .

Разница в том, что в этом вопросе: "ABC, DEF" нарушал код.

Здесь "ABC" DE ", F" нарушает код.

Вся строка должна быть проанализирована как 'ABC "DE", F ".Вместо этого внутренние двойные кавычки приводят к упомянутой ниже проблеме.

Я работаю с CSV-файлом, который содержит записи следующего типа:

header1, header2, header3,header4

2001-01-01,123456, "abc def", V4

2001-01-02,789012, "ghi" jklm "n, op", V4

Вторая строка данных нарушает код со следующей ошибкой:

ParserError: Error tokenizing data. C error: Expected 4 fields in line 1234, saw 5

Я пытался играть с различными sep, delimiter & quoting и т. Д., Нокажется, ничего не работает.

Может кто-нибудь помочь с этим?Спасибо!

1 Ответ

0 голосов
/ 13 декабря 2018

Основываясь на двух предоставленных вами строках, есть опция, в которой текстовый файл считывается в объект Series, а затем извлекается регулярное выражение через Series.str.extract(), чтобы получить необходимую информацию в DataFrame:

with open('so.txt') as f:
    contents = f.readlines()

s = pd.Series(contents)

s теперь выглядит следующим образом:

0 header1, header2, header3,header4\n 1 \n 2 2001-01-01,123456,"abc def",V4\n 3 \n 4 2001-01-02,789012,"ghi "jklm" n,op",V4

Теперь вы можете использовать извлечение регулярных выражений, чтобы получить то, что вы хотите, в DataFrame:

df = s.str.extract('^([0-9]{4}-[0-9]{2}-[0-9]{2}),([0-9]+),(.+),(\w{2})$')

# remove empty rows
df = df.dropna(how='all')

df выглядит следующим образом:

0 1 2 3 2 2001-01-01 123456 "abc def" V4 4 2001-01-02 789012 "ghi "jklm" n,op" V4

, и вы можете задать имена столбцов с помощью df.columns = ['header1', 'header2', 'header3', 'header4']

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...