Чтение и запись данных из различных источников (CSV, Excel, SQL)
На предыдущем этапе мы изучили «скелет» данных — структуры Series и DataFrame. Теперь пришло время наполнить эти структуры реальной информацией. В работе аналитика данные редко создаются вручную; чаще всего мы забираем их из внешних файлов или баз данных.
Процесс импорта данных (Data Ingestion) — это первый шаг любого исследования. Мы научимся не просто загружать таблицы, но и делать это эффективно, учитывая специфику форматов и кодировок, с которыми сталкиваются специалисты в России.
Работа с CSV: Универсальный стандарт
Формат CSV (Comma-Separated Values — значения, разделенные запятой) является самым популярным для обмена данными. Однако в российской практике вместо запятой часто используется точка с запятой (;), а кодировка может отличаться от стандартной UTF-8.
Базовое чтение и типичные проблемы
Если мы просто вызовем функцию без параметров, мы рискуем получить ошибку или нечитаемый текст («кракозябры»).
Пример с ошибками (неэффективный подход):
import pandas as pd
# Если файл использует точку с запятой и кодировку Windows-1251,
# этот код выдаст ошибку или превратит русский текст в нечитаемый набор символов
df = pd.read_csv('sales_data.csv')
Профессиональный подход:
Мы заранее указываем разделитель (sep), кодировку (encoding) и колонку, которую хотим сделать индексом.
import pandas as pd
# Читаем файл с учетом российской специфики Excel-экспорта
df = pd.read_csv(
'sales_data.csv',
sep=';', # Указываем разделитель
encoding='cp1251', # Стандартная кодировка для кириллицы в Windows
index_col='id_transaction' # Сразу назначаем индекс
)
# Проверяем первые 5 строк
print(df.head())
Совет: Если вы не знаете кодировку файла, попробуйте сначала
utf-8. Если возникла ошибкаUnicodeDecodeError, используйтеcp1251(она жеwindows-1251).
Excel: Работа с листами и диапазонами
Несмотря на мощь Python, бизнес-логика часто живет в файлах .xlsx. Библиотека Pandas позволяет гибко извлекать данные из конкретных листов.
# Чтение конкретного листа из книги Excel
df_marketing = pd.read_excel(
'report_2026.xlsx',
sheet_name='Marketing_Data',
usecols='A:F', # Читаем только нужные столбцы
nrows=1000 # Ограничиваем загрузку первой тысячей строк для экономии памяти
)
Для работы с современными форматами Excel в 2026 году убедитесь, что у вас установлена библиотека-движок openpyxl. Мы упоминали важность установки окружения в теме Установка Python, Jupyter Notebook и необходимых библиотек.
SQL: Прямое подключение к базе данных
Вспомним наши настройки из темы Настройка SQL-клиента и подключение к базе данных. Вместо того чтобы вручную экспортировать результаты запросов из DBeaver в CSV, мы можем подключиться к базе напрямую из Python.
Для этого используется библиотека SQLAlchemy, которая создает «мост» (engine) между кодом и базой.
from sqlalchemy import create_engine
import pandas as pd
# Создаем подключение к нашей базе SQLite (файл chinook.db)
engine = create_engine('sqlite:///chinook.db')
# Пишем SQL-запрос
query = """
SELECT Name, Composer
FROM tracks
WHERE Milliseconds > 300000
"""
# Загружаем результат запроса напрямую в DataFrame
df_tracks = pd.read_sql(query, engine)
Почему это важно? Мы выполняем фильтрацию на стороне сервера базы данных. В память Python попадают только те строки, которые нам действительно нужны. Это критически важно при работе с миллионами записей.
Запись данных: Сохранение результатов
Анализ бесполезен, если его результаты нельзя передать дальше. Мы можем сохранить наш обработанный DataFrame обратно в любой формат.
| Метод | Описание | Когда использовать |
|---|---|---|
to_csv() | Сохранение в текстовый файл | Для обмена данными между разными системами |
to_excel() | Создание Excel-отчета | Для передачи результатов менеджерам и коллегам |
to_sql() | Запись таблицы в базу данных | Для сохранения результатов в хранилище компании |
Пример сохранения отчета в Excel:
# Сохраняем без записи индексов (чтобы не создавать лишний столбец в Excel)
df_tracks.to_excel('long_tracks_report.xlsx', index=False)
Чек-лист: Что делать, если данные не читаются?
Если при попытке загрузить файл вы видите ошибку, пройдите по этим пунктам:
- Проверьте путь (Path): Убедитесь, что файл лежит в той же папке, что и ваш ноутбук Jupyter, или укажите полный путь.
- Кодировка (Encoding): Попробуйте
encoding='utf-8'илиencoding='cp1251'. - Разделитель (Delimiter): Откройте файл в обычном «Блокноте» и посмотрите, какой символ разделяет колонки (запятая, точка с запятой или табуляция
\t). - Пропуски в начале: Иногда в Excel первые 2-3 строки заняты «шапкой» с названием отчета. Используйте параметр
skiprows=3, чтобы начать чтение с заголовков таблицы.
На этом этапе мы научились «втягивать» данные в Python из самых разных источников. Однако в реальности данные редко бывают идеальными. Часто они содержат ошибки, пустые ячейки или дубликаты.
В следующей теме — Очистка данных: Обработка пропусков, дубликатов, некорректных значений — мы узнаем, как превратить «сырой» массив информации в чистый и надежный инструмент для принятия решений.