В учебном CSV три строки данных: ID 001, 002 и 003, метки групп и часы. Для этого файла заранее заданы UTF-8, разделитель полей «;» и десятичная запятая. Разберём, как прочитать его в pandas с текстовым ID и сохранить различие между нулём и пустым значением. Все данные вымышлены.

Полный текст учебного файла ниже. Для повторения примера сохраните эти строки в UTF-8 под именем data.csv; первая строка — заголовок, ещё три — данные.

id;группа;часы
001;А;2,5
002;Б;0,0
003;А;

В этом файле «;» разделяет поля, а запятая внутри 2,5 и 0,0 служит десятичным знаком. Последняя строка 003;А; содержит пустое третье поле «часы». Это отличается от известного нулевого значения 0,0 у ID 002. Причина отсутствия часов у 003 в учебном наборе не задана.

Настройки pandas

В Python код такой:

import pandas as pd

df = pd.read_csv(
    'data.csv',
    sep=';',            # разделитель полей
    decimal=',',         # десятичный знак — запятая
    dtype={'id': str},   # id читаем как текст
    encoding='utf-8'
)

После чтения получим:

idгруппачасы
001А2.5
002Б0.0
003АNaN
Учебный CSV с разделителем точка с запятой прочитан с текстовыми ID 001, 002, 003; часы 2,5, 0 и пропуск. Ведущие нули сохранены.
Учебная схема импорта, не скриншот Excel. Данные вымышлены. Для показанного UTF-8 файла заданы разделитель ;, десятичная запятая и текстовый тип ID; пустое поле часов сохранено как пропуск.

В таблице три поля исходного файла: id, группа и часы. Среди трёх значений часов два известны и одно пропущено. Ведущие нули в id сохранены как часть текста.

После указанного чтения ID остаются строками 001, 002, 003, группы — А, Б, А. Часы распознаны как числа 2.5 и 0.0; отсутствующее значение представлено как NaN. Точка в показанном числовом выводе не означает, что исходный CSV был перезаписан. Ноль и пропуск различаются.

Если ID распознан как число, его числовое значение не хранит исходные ведущие нули. Для сохранения исходной строки задайте текстовый тип при чтении. После потери нулей не угадывайте длину ID по оставшемуся числу: возьмите исходный CSV, сравните значения и повторите импорт с текстовым типом. Формат отображения сам по себе не устанавливает, каким был исходный идентификатор.

Что проверить при импорте в Excel

Microsoft описывает прямое открытие CSV и импорт текстовых данных. При прямом открытии столбцы интерпретируются по текущим настройкам формата. Для контроля типов можно использовать доступный в вашей версии импорт «Из текста/CSV» либо мастер импорта текста. Мастер относится к legacy-функциям и может потребовать включения; названия и расположение элементов зависят от версии. Испытание этого файла в интерфейсе Excel здесь не проводилось.

Для показанного учебного формата перед подтверждением импорта сверьте настройки и предварительный просмотр:

  • Разделитель полей — точка с запятой; предварительный просмотр показывает три поля.
  • Кодировка соответствует UTF-8 учебного файла; кириллица читается как А, Б, А.
  • Для id выбран текстовый тип до преобразования значений, чтобы сохранить строки с нулями.
  • Для чисел учитывается десятичная запятая исходного файла; конкретный способ настройки зависит от выбранного инструмента импорта.
  • После импорта сверены исходные значения и пустое поле часов. Отображение известного нуля может отличаться, поэтому проверяют значение, а не только число знаков после запятой.

После чтения данных правила обработки отсутствующих ответов нужно описать отдельно. Это разобрано в статье о пропусках в анкете и знаменателях расчёта. Смысл полей и выбранные коды удобно зафиксировать в кодировочной книге данных.

Чек-лист: что проверить перед импортом любого csv

НастройкаНаш примерЧто делать для другого файла
Разделитель;Посмотрите в исходнике: запятая, табуляция, точка с запятой?
Десятичный знак,Посмотрите на числа: 2,5 или 2.5?
Тип IDstrЕсли ведущие нули входят в ID, импортируйте этот столбец как текст
Кодировкаutf-8Сверьте кодировку по документации источника и предпросмотр кириллицы; для учебного файла явно выбран UTF-8.
ПропускиПустое полеПустая ячейка — это 0 или отсутствие данных?

Коротко

  • Если ведущие нули входят в ID, импортируйте этот столбец как текст — и в pandas, и в мастере Excel.
  • Для данного файла в pandas задан decimal=",". Для другого CSV сначала определите фактический десятичный знак и разделитель полей; настройки Excel сверяйте с его документацией и предпросмотром.
  • Пропуск и ноль — разные вещи. Пустое поле не становится нулём само по себе.
  • Сверили исходные три строки с результатом импорта — все на месте? Значит, настройки подобраны верно.

Если нужна консультация по подготовке собственного набора к анализу, можно обсудить статистическую обработку данных. Заранее уточните задачу, структуру файлов и объём консультации.

Источники

Фото: RDNE Stock project / Pexels