Чтение и запись данных из различных источников (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)

Чек-лист: Что делать, если данные не читаются?

Если при попытке загрузить файл вы видите ошибку, пройдите по этим пунктам:

  1. Проверьте путь (Path): Убедитесь, что файл лежит в той же папке, что и ваш ноутбук Jupyter, или укажите полный путь.
  2. Кодировка (Encoding): Попробуйте encoding='utf-8' или encoding='cp1251'.
  3. Разделитель (Delimiter): Откройте файл в обычном «Блокноте» и посмотрите, какой символ разделяет колонки (запятая, точка с запятой или табуляция \t).
  4. Пропуски в начале: Иногда в Excel первые 2-3 строки заняты «шапкой» с названием отчета. Используйте параметр skiprows=3, чтобы начать чтение с заголовков таблицы.

На этом этапе мы научились «втягивать» данные в Python из самых разных источников. Однако в реальности данные редко бывают идеальными. Часто они содержат ошибки, пустые ячейки или дубликаты.

В следующей теме — Очистка данных: Обработка пропусков, дубликатов, некорректных значений — мы узнаем, как превратить «сырой» массив информации в чистый и надежный инструмент для принятия решений.