Панды read_csv с неверным разделителем заголовка - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть CSV-файл, скажем test.csv, и он выглядит следующим образом

Data 1 | Data 2 | Data 3 |
1      | 2      | 3      |      |      |    6

Если я открою CSV-файл в блокноте ++ или в текстовом формате, он отобразится следующим образом

Data 1, Data 2, Data 3
1,2,3,,,6

instead of

Data 1, Data 2, Data 3, ,,
1,2,3,,,6

Я получаю сообщение об ошибке, используя pandas.read_csv, потому что в моих строках больше столбцов, чем объявлено в строке заголовка.Есть ли способы найти максимальное количество столбцов всего CSV?

1 Ответ

0 голосов
/ 27 сентября 2019

Мое предложение:

  • пропустить строку заголовка,
  • указать свой собственный список имен столбцов.

Таким образом, код должен быть:

df = pd.read_csv(io.StringIO(txt), skiprows=1,
    names=['Data 1', 'Data 2', 'Data 3', 'Data 4', 'Data 5', 'Data 6'])

Подробно рассмотрим, как следует представлять пустые ячейки.

Поведение по умолчанию read_csv состоит в том, чтобы рассматривать их как NaN * 1017.*, но недостатком является то, что такие столбцы приводятся к float .

Другая возможность - передать параметр na_filter=False и затем:

  • такой пустойстроки представляются «как есть» (как пустая строка),
  • , но столбцы с этими значениями на этот раз приводятся к object , потому что ячейки string смешаны с int .

Обратите внимание, что формат строки заголовка поврежден еще в одной детали.Источником проблемы являются пробелы после запятых: они становятся начальной частью имени следующего столбца.

Таким образом, даже если у вас всего 3 столбца данных, имена столбцов будут такими:

['Data 1', ' Data 2', ' Data 3']

(обратите внимание на начальные пробелы).Так что это еще одна причина пропустить строку заголовка.

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