Загрузка 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
Файл создаётся до выполнения вашего кода. Никаких заранее созданных переменных нет — вы читаете файл сами.
Что нужно сделать
Напишите верхнеуровневый код (без функций), который:
- Загружает файл
employees.csvчерезpd.read_csvс тремя параметрами:
usecols=['emp_id', 'salary', 'hired_on']— загрузить только эти три столбца;dtype={'emp_id': 'int32', 'salary': 'float64'}— задать типы явно;parse_dates=['hired_on']— разобрать столбецhired_onкак дату.
- Сохраняет результат в переменную
df. - Создаёт переменную
col_names— список имён столбцов:list(df.columns). - Создаёт переменную
emp_id_dtype— строковое представление dtype столбцаemp_id:str(df['emp_id'].dtype). - Создаёт переменную
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отсутствуют.
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- Загрузка CSV с явными типами и датами через readcsv — задача по NumPy и pandas
- pandas readcsv: конфликт usecols и parsedates
- pd.readcsv с chunksize: что возвращает вызов
- pandas Series из словаря: index, shape и dtype
- pandas DataFrame из списка словарей: пример и задача
- Выборка столбцов и строк: [], loc и iloc без цепочной индексации — задача по NumPy и pandas
