Загрузка CSV в pandas: dtype, usecols и разбор дат

В pandas read_csv параметр usecols выбирает столбцы, dtype задаёт их типы, а parse_dates просит разобрать выбранные столбцы как даты. Это позволяет контролировать результат загрузки.

Задавайте типы по смыслу данных

Код товара 0017 часто нужно хранить как строку: преобразование в число уберёт ведущие нули. Для суммы подходит числовой тип, а столбец дат можно передать в parse_dates. Проверяйте результат через dtypes и пробные операции с .dt.

Столбец из parse_dates должен присутствовать в наборе загружаемых столбцов. Если включили usecols, согласуйте эти списки. При неоднозначном формате дат или неразобранных значениях проверьте исходные строки и при необходимости используйте явное преобразование pd.to_datetime.

Пример на других данных

from io import StringIO
import pandas as pd
csv = StringIO("sku,amount,date\n0017,125.5,2026-01-02\n")
df = pd.read_csv(csv, usecols=["sku", "date"],
                 dtype={"sku": "string"}, parse_dates=["date"])
print(df["sku"].iloc[0])
print(df["date"].dt.year.tolist())

Результат:

0017
[2026]

Попробуйте сами

Ниже — отдельное упражнение: напишите код и запустите проверку. Другие упражнения по этой теме. Для обучения по порядку откройте бесплатный курс NumPy и pandas.

pd.read_csv с usecols, dtype и parse_dates: загрузка и проверка dtypes

Что уже дано

Проверяющая система выполняет скрытый start_code, который создаёт файл employees.csv в рабочей директории. Содержимое файла:

emp_id,name,salary,department,hired_on
1,Алина,75000.0,Разработка,2021-03-15
2,Борис,92000.0,Аналитика,2019-11-01
3,Вера,64000.0,Разработка,2022-06-30
4,Глеб,110000.0,Управление,2018-04-12
5,Дина,81000.0,Аналитика,2020-09-07

Файл создаётся до выполнения вашего кода. Никаких заранее созданных переменных нет — вы читаете файл сами.

Что нужно сделать

Напишите верхнеуровневый код (без функций), который:

  1. Загружает файл employees.csv через pd.read_csv с тремя параметрами:
  • usecols=['emp_id', 'salary', 'hired_on'] — загрузить только эти три столбца;
  • dtype={'emp_id': 'int32', 'salary': 'float64'} — задать типы явно;
  • parse_dates=['hired_on'] — разобрать столбец hired_on как дату.
  1. Сохраняет результат в переменную df.
  2. Создаёт переменную col_names — список имён столбцов: list(df.columns).
  3. Создаёт переменную emp_id_dtype — строковое представление dtype столбца emp_id: str(df['emp_id'].dtype).
  4. Создаёт переменную hired_on_kind — первый символ dtype столбца hired_on: df['hired_on'].dtype.kind. Для datetime64[ns] это 'M'.

Проверяющая система читает переменные df, col_names, emp_id_dtype и hired_on_kind после выполнения вашего кода.

Ввод и вывод

stdin не используется. Печатать через print в stdout ничего не нужно.

Проверяющая система читает верхнеуровневые переменные df, col_names, emp_id_dtype и hired_on_kind после выполнения вашего кода и проверяет:

  • df.shape равен (5, 3);
  • col_names содержит ровно ['emp_id', 'salary', 'hired_on'];
  • emp_id_dtype равен 'int32';
  • hired_on_kind равен 'M' (datetime);
  • столбец name и столбец department в df отсутствуют.
РешениеPython

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи