Структуры данных и импорт файлов
Инструмент для таблиц: почему не Excel и не стандартный Python
Анализ данных часто начинается с таблиц. Если вы когда-нибудь пытались обрабатывать табличные данные с помощью стандартных списков и словарей Python, вы знаете, насколько это трудоемко. Написание вложенных циклов, постоянные проверки на пустые значения и десятки строк кода ради простейшей группировки делают процесс медленным и подверженным ошибкам.
С другой стороны, существует Excel — отличный инструмент для визуального просмотра и базовых расчетов. Но у него есть физические ограничения. Если количество строк в вашем файле , Excel просто не сможет открыть его полностью. Кроме того, ручные операции в Excel сложно автоматизировать и масштабировать.
Библиотека Pandas решает обе эти проблемы. Это швейцарский нож для табличных данных в экосистеме Python. Она загружает данные в оперативную память компьютера и позволяет фильтровать миллионы строк, находить аномалии и объединять разные файлы за доли секунды с помощью пары строк элегантного кода.
Установка и негласный контракт разработчиков
Если вы используете стандартный дистрибутив Python, библиотеку необходимо установить через терминал:
pip install pandas
В мире анализа данных существует жесткое правило импорта этой библиотеки. Никто не пишет просто import pandas. Все разработчики договорились использовать сокращение (алиас) pd. Это стандарт, который вы встретите в любом чужом коде, документации или ответе на форуме:
import pandas as pd
Анатомия таблиц: Series и DataFrame
Вся магия Pandas строится на двух базовых структурах данных. Понимание их внутреннего устройства — ключ к эффективной работе с библиотекой.
Series: умная колонка
Series — это одномерный массив данных. Визуально его можно представить как одну колонку в таблице. Главное отличие Series от обычного списка Python заключается в наличии индекса — встроенной системы меток для каждого элемента.
Представьте обычный список продаж за три дня: [150, 200, 120]. В Python вы обращаетесь к ним по порядковым номерам (0, 1, 2). В Pandas вы можете привязать к каждому значению осмысленную метку, например, дату.
sales = pd.Series([150, 200, 120], index=['2023-10-01', '2023-10-02', '2023-10-03'])
print(sales)
Индекс позволяет мгновенно находить нужные данные не по их позиции, а по смысловому ключу, что работает так же быстро, как поиск в словаре.
DataFrame: царь-таблица
DataFrame — это двумерная структура данных, состоящая из строк и столбцов. По сути, это классическая таблица.
С технической точки зрения DataFrame — это набор объектов Series, которые имеют общий индекс. Если Series — это отдельная колонка, то DataFrame — это вся таблица целиком, где каждая колонка имеет свое имя (заголовок), а все строки связаны единым индексом.
Создать DataFrame с нуля можно из обычного словаря Python. Это невероятно полезно для быстрого прототипирования или создания небольших тестовых наборов данных.
data = {
'Имя': ['Анна', 'Борис', 'Виктор'],
'Возраст': [28, 34, 29],
'Город': ['Москва', 'Санкт-Петербург', 'Казань']
}
df = pd.DataFrame(data)
print(df)
В результате выполнения этого кода ключи словаря станут названиями столбцов, а списки — их содержимым. Pandas автоматически сгенерирует числовой индекс от 0 до 2.
Импорт данных из внешних источников
В реальной работе аналитика данные редко создаются вручную. Обычно они выгружаются из баз данных, CRM-систем или предоставляются заказчиком в виде файлов. Самый популярный формат обмена табличными данными — CSV (Comma-Separated Values).
Чтение CSV-файлов
Для загрузки CSV-файла используется функция read_csv(). В самом простом сценарии достаточно передать ей путь к файлу:
df = pd.read_csv('sales_data.csv')
Однако реальные данные редко бывают идеальными. Часто при попытке открыть файл вы можете столкнуться с ошибками или получить нечитаемый текст («кракозябры»). Для решения этих проблем у функции read_csv() есть десятки параметров. Рассмотрим самые важные:
- sep (разделитель). По стандарту в CSV значения разделяются запятой. Но в русскоязычных системах запятая часто используется как разделитель целой и дробной части числа (), поэтому колонки разделяют точкой с запятой. Если таблица склеилась в одну строку, укажите разделитель явно:
sep=';'. - encoding (кодировка). Если текст в файле отображается некорректно, скорее всего, проблема в кодировке. Для файлов, созданных в старых версиях Windows, часто помогает
encoding='windows-1251'. Современный стандарт —encoding='utf-8'. - index_col (колонка-индекс). Если в вашем файле уже есть колонка с уникальными идентификаторами (например, ID клиента), вы можете сразу сделать ее индексом таблицы:
index_col='client_id'.
Пример надежного импорта проблемного файла:
df = pd.read_csv('clients_export.csv', sep=';', encoding='windows-1251', index_col='id')
Работа с Excel
Pandas также отлично справляется с файлами Excel (форматы .xls и .xlsx). Для этого используется функция read_excel().
Важное отличие: файлы Excel могут содержать несколько листов. По умолчанию Pandas загружает только первый лист.
Если вам нужен конкретный лист, укажите его название в параметре sheet_name:
df_finance = pd.read_excel('annual_report.xlsx', sheet_name='Q3_Revenue')
Первое знакомство с датасетом
Представьте: вы успешно загрузили файл на строк. Выводить всю таблицу на экран бессмысленно — это перегрузит интерфейс и не даст вам никакой полезной информации. Вместо этого в Pandas есть три метода для быстрого аудита загруженных данных.
1. Осмотр структуры: head() и tail()
Метод head() выводит первые 5 строк таблицы. Этого достаточно, чтобы визуально оценить, правильно ли загрузились данные, корректно ли определились заголовки и нет ли смещения колонок.
df.head()
Если вам нужно посмотреть последние строки (например, чтобы проверить свежие записи, если данные отсортированы по времени), используйте метод tail().
2. Оценка масштаба: атрибут shape
Чтобы узнать точный размер таблицы, обратитесь к атрибуту shape. Обратите внимание: это свойство таблицы, а не функция, поэтому скобки на конце не ставятся.
print(df.shape)
Результатом будет кортеж из двух чисел, например (500000, 14). Это означает, что в вашей таблице ровно 500 тысяч строк и 14 столбцов. Понимание размерности критически важно перед запуском ресурсоемких операций.
3. Технический паспорт таблицы: info()
Метод info() — это рентгеновский снимок вашего датасета. Он выводит сводную техническую информацию:
- Общее количество строк и столбцов.
- Названия всех колонок.
- Количество непустых (non-null) значений в каждой колонке.
- Тип данных каждой колонки (числа, строки, даты).
- Объем оперативной памяти, который занимает таблица.
| Колонка | Non-Null Count | Dtype |
|---|---|---|
| client_id | 500000 non-null | int64 |
| 498200 non-null | object | |
| total_spent | 500000 non-null | float64 |
В этом примере мы сразу видим проблему: в колонке email всего 498 200 заполненных значений при общем количестве строк в 500 000. Это значит, что у 1 800 клиентов не указана электронная почта. Такие пропуски — частая головная боль аналитика, и метод info() позволяет обнаружить их в первые же секунды работы.
Освоив правильный импорт и первичный осмотр данных, вы закладываете надежный фундамент. Ошибка на этапе чтения файла (например, неправильная кодировка или потерянный разделитель) может исказить все последующие результаты анализа.