Загрузка 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 — но это уже отдельная тема.
