pandas: устройство, выборка и изменение таблиц

Загрузка CSV с явными типами и датами через read_csv

Содержание курса

Проверка типов через df.dtypes и сквозной пример

После того как read_csv отработал с нужными параметрами, остаётся один вопрос: применились ли они так, как ожидалось? Ответ даёт df.dtypes.

df.dtypes возвращает Series, где индекс — имена столбцов, а значения — их типы. Смотреть его нужно сразу после загрузки, до любой дальнейшей обработки — именно тогда он подтверждает, что параметры dtype и parse_dates сработали корректно.

Разберём на конкретном примере. Возьмём CSV с четырьмя столбцами: id, date, amount, category. Нужны только первые три, id должен быть int32, amount — float64, а date — datetime64:

import pandas as pd
import io

csv_text = '''id,date,amount,category
1,2024-01-15,99.5,food
2,2024-02-20,150.0,tech
3,2024-03-10,45.25,food
'''

buf = io.StringIO(csv_text)
df = pd.read_csv(
    buf,
    usecols=['id', 'date', 'amount'],
    dtype={'id': 'int32', 'amount': 'float64'},
    parse_dates=['date']
)

print(df.dtypes)

Вывод:

id               int32
date    datetime64[ns]
amount         float64
dtype: object

Это именно то, что задавалось при вызове. category в DataFrame вообще нет — usecols его исключил. id получил int32, а не дефолтный int64. date стал datetime64[ns], а не строкой. amount — float64.

Если какой-то тип не совпал с ожидаемым, чаще всего причина в одном из двух:

  • Неизвестный ключ в dtype — pandas молча игнорирует его, столбец получает автоматический тип. Например, если написать dtype={'amout': 'float64'} (опечатка), ошибки не будет, но amount окажется float64 лишь случайно (по автовыводу), а намерение останется незамеченным. Проверяйте df.dtypes именно поэтому.
  • Несуществующий столбец в parse_dates — поведение противоположное: pandas бросит ValueError.

Это значит, что имя столбца в parse_dates не совпадает ни с одним столбцом в файле (или он был исключён через usecols). Здесь ошибка видна сразу.

Во всех случаях df.dtypes помогает локализовать проблему: если тип столбца не тот, что ожидался, — ищите опечатку в ключе dtype или проверьте, не исключён ли нужный столбец через usecols.

df.dtypes — тот же атрибут, что уже использовался при ручном создании DataFrame в предыдущем уроке. Разница только в контексте: там он описывал структуру, которую задавали явно через словарь; здесь — подтверждает, что read_csv правильно интерпретировал CSV-файл. Этот же datetime64[ns]-столбец позже станет базой для работы с компонентами дат через .dt — но это уже отдельная тема.

Закрепите тему на задачах

После загрузки проверьте число строк, dtype и значение ключа с ведущими нулями. Разделитель и кодировка могут создать правдоподобную, но неверную таблицу.

Загрузка CSV с явными типами и датами через read_csv — задача по NumPy и pandas

pandas read_csv: usecols, dtype и parse_dates в задаче

pandas read_csv: конфликт usecols и parse_dates

Откройте условие и решите задачу перед чтением следующей темы. В задачах на код проверяется программа, в тестовых заданиях — выбранный ответ. Для последовательного обучения вернитесь в программу бесплатного курса.


Как анализировать выгрузку с продажами

После загрузки данных нужно проверить дубли и пропуски, выбрать показатели и сравнить периоды. В платной «Практической аналитике данных» вы разберёте этот процесс на продажах, клиентах и рекламных каналах, а затем оформите результаты в дашборд и аналитическую записку.

Выбрать другое направление в каталоге Latorn →

Начать заново?

Помощник начнёт новый диалог по этой задаче. Текущая переписка останется в истории до конца срока хранения.

О переписке

Можно приложить до трёх фото PNG, JPEG или WebP по 5 МБ.

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

Проверка решения остаётся отдельным действием.