Добавить в корзинуПозвонить
Найти в Дзене
Иван Ворсин

Полное руководство по анализу данных с Pandas: от основ до продвинутых техник

Введение в Pandas и анализ данных Pandas — ключевой инструмент в экосистеме Python для работы с данными. Разработанная Уэсом Маккини в 2008 году, эта библиотека стала стандартом для data science благодаря скорости, гибкости и мощным функциям. Pandas идеально подходит для: Загрузки и сохранения данных в разных форматах Очистки и подготовки данных Статистического анализа Подготовки данных для машинного обучения Визуализации данных (часто в сочетании с Matplotlib и Seaborn) В этом руководстве мы подробно рассмотрим Pandas, от базовых операций до сложных техник. --- 1. Основные структуры данных в Pandas 1.1 Series — одномерные данные с метками Series — это одномерный массив с метками, который может содержать данные любого типа. Метки осей называются индексами. Создание Series: import pandas as pd import numpy as np # Из списка s1 = pd.Series([1, 3, 5, np.nan, 6, 8]) # Из словаря s2 = pd.Series({'a': 1, 'b': 2, 'c': 3}) # С указанием индекса s3 = pd.Series([10, 20, 30], index=['x',

Введение в Pandas и анализ данных

Pandas — ключевой инструмент в экосистеме Python для работы с данными. Разработанная Уэсом Маккини в 2008 году, эта библиотека стала стандартом для data science благодаря скорости, гибкости и мощным функциям.

Pandas идеально подходит для:

Загрузки и сохранения данных в разных форматах

Очистки и подготовки данных

Статистического анализа

Подготовки данных для машинного обучения

Визуализации данных (часто в сочетании с Matplotlib и Seaborn)

В этом руководстве мы подробно рассмотрим Pandas, от базовых операций до сложных техник.

---

1. Основные структуры данных в Pandas

1.1 Series — одномерные данные с метками

Series — это одномерный массив с метками, который может содержать данные любого типа. Метки осей называются индексами.

Создание Series:

import pandas as pd import numpy as np # Из списка s1 = pd.Series([1, 3, 5, np.nan, 6, 8]) # Из словаря s2 = pd.Series({'a': 1, 'b': 2, 'c': 3}) # С указанием индекса s3 = pd.Series([10, 20, 30], index=['x', 'y', 'z'])

Основные операции с Series:

# Арифметические операции s = pd.Series([1, 2, 3, 4, 5]) s + 10 # Добавляет 10 к каждому элементу s * 2 # Умножает каждый элемент на 2 # Фильтрация s[s > 3] # Выбирает элементы больше 3 # Статистические методы s.mean() # Среднее значение s.std() # Стандартное отклонение s.describe() # Основные статистики

1.2 DataFrame — двумерные табличные данные

DataFrame — это двумерная структура с метками строк и столбцов, напоминающая электронную таблицу или SQL-таблицу.

Создание DataFrame:

# Из словаря data = {'Имя': ['Анна', 'Борис', 'Кирилл'], 'Возраст': [25, 30, 35], 'Город': ['Москва', 'Санкт-Петербург', 'Казань']} df = pd.DataFrame(data) # Из списка списков data = [['Анна', 25, 'Москва'], ['Борис', 30, 'Санкт-Петербург'], ['Кирилл', 35, 'Казань']] df = pd.DataFrame(data, columns=['Имя', 'Возраст', 'Город']) # Специальные конструкторы pd.DataFrame(np.random.randn(5, 3), columns=['A', 'B', 'C']) # Случайные данные

Основные атрибуты и методы DataFrame:

df.shape # Размерность (строки, столбцы) df.columns # Названия столбцов df.index # Индексы строк df.dtypes # Типы данных столбцов df.head() # Первые 5 строк df.tail(3) # Последние 3 строки df.info() # Информация о DataFrame df.describe() # Статистика по числовым столбцам

---

2. Загрузка и сохранение данных

2.1 Работа с CSV

Чтение CSV:

# Простые случаи df = pd.read_csv('data.csv') # Специальные параметры df = pd.read_csv('data.csv', sep=';', # Разделитель header=0, # Строка заголовков index_col=0, # Столбец для индекса na_values=['NA', 'н/д'], # Обозначения пропусков encoding='utf-8') # Кодировка

Запись в CSV:

df.to_csv('output.csv', index=False, # Не сохранять индексы sep=';', # Разделитель encoding='cp1251') # Кодировка

2.2 Работа с Excel

Чтение Excel:

df = pd.read_excel('data.xlsx', sheet_name='Лист1', header=1, # Заголовок во второй строке usecols='A:D') # Только столбцы A-D

Запись в Excel:

with pd.ExcelWriter('output.xlsx') as writer: df.to_excel(writer, sheet_name='Результаты', index=False) # Можно записать несколько листов df2.to_excel(writer, sheet_name='Дополнительно')

2.3 Другие форматы

Pandas поддерживает множество других форматов данных:

# JSON pd.read_json('data.json') df.to_json('output.json') # SQL import sqlite3 conn = sqlite3.connect('database.db') pd.read_sql('SELECT * FROM table', conn) df.to_sql('new_table', conn) # HTML (парсинг таблиц с веб-страниц) pd.read_html('https://example.com/table.html')[0]

---

3. Основные операции с данными

3.1 Индексация и выбор данных

Выбор столбцов:

df['Имя'] # Один столбец (возвращает Series) df[['Имя', 'Возраст']] # Несколько столбцов (DataFrame)

Выбор строк:

df.loc[0] # По метке индекса df.iloc[0] # По позиции (0 - первая строка) df.loc[1:3] # Срезы по меткам df.iloc[1:3] # Срезы по позициям

Условный выбор:

df[df['Возраст'] > 30] # Простое условие df[(df['Возраст'] > 25) & (df['Город'] == 'Москва')] # Комбинированные условия df.query('Возраст > 25 and Город == "Москва"') # Альтернативный синтаксис

3.2 Обработка пропущенных данных

Обнаружение пропусков:

df.isna() # Булева маска пропусков df.isna().sum() # Количество пропусков по столбцам

Обработка пропусков:

df.dropna() # Удаление строк с пропусками df.fillna(0) # Замена пропусков нулями df.fillna(df.mean()) # Замена средним значением df['Возраст'].interpolate() # Интерполяция

3.3 Преобразование данных

Добавление/удаление столбцов:

df['Новый_столбец'] = df['Возраст'] * 2 # Добавление df.drop('Город', axis=1) # Удаление

Изменение индекса:

df.set_index('Имя') # Установка нового индекса df.reset_index() # Сброс индекса

Применение функций:

df['Возраст'].apply(lambda x: x + 1) # К каждому элементу df.apply(np.mean, axis=0) # По столбцам df.apply(np.mean, axis=1) # По строкам

---

4. Продвинутые техники

4.1 Группировка и агрегация

# Простая группировка grouped = df.groupby('Город') # Множественная группировка df.groupby(['Город', 'Возраст']) # Агрегатные функции df.groupby('Город')['Возраст'].mean() df.groupby('Город').agg({'Возраст': ['mean', 'min', 'max'], 'Имя': 'count'}) # Трансформации (например, z-score) df.groupby('Город')['Возраст'].transform(lambda x: (x - x.mean()) / x.std())

4.2 Объединение данных

# Конкатенация pd.concat([df1, df2], axis=0) # По строкам pd.concat([df1, df2], axis=1) # По столбцам # Соединения (как в SQL) pd.merge(df1, df2, on='ключ') # INNER JOIN pd.merge(df1, df2, on='ключ', how='left') # LEFT JOIN

4.3 Временные ряды

# Преобразование в DateTime df['Дата'] = pd.to_datetime(df['Дата']) # Ресемплинг временных рядов df.set_index('Дата').resample('M').mean() # По месяцам # Скользящие окна df['Возраст'].rolling(window=3).mean() # Скользящее среднее

---

5. Оптимизация производительности

5.1 Векторизация операций

Избегайте циклов — используйте встроенные методы Pandas:

# Плохо (медленно) for i in range(len(df)): df.loc[i, 'Новый_столбец'] = df.loc[i, 'Возраст'] * 2 # Хорошо (быстро) df['Новый_столбец'] = df['Возраст'] * 2

5.2 Использование категориальных данных

Для столбцов с небольшим числом уникальных значений используйте категориальные данные:

df['Город'] = df['Город'].astype('category')

5.3 Методы eval() и query()

Для сложных операций используйте eval() и query():

df.eval('Новый_столбец = (Возраст * 2) / (Рост + 1)', inplace=True)

---

Заключение

Pandas — мощный инструмент для анализа данных в Python. В этом руководстве мы рассмотрели:

Основные структуры данных (Series и DataFrame)

Методы загрузки и сохранения данных

Техники очистки и преобразования данных

Продвинутые методы группировки и агрегации

Оптимизацию производительности

Для дальнейшего изучения рекомендуем:

Официальную документацию Pandas

Практические задачи на Kaggle

Специализированные курсы по анализу данных

Освоив Pandas, вы сможете решать большинство задач анализа данных быстро и эффективно.

https://ivan-vorsin.ru/polnoe-rukovodstvo-po-analizu-dannyh-s-pandas-ot-osnov-do-prodvinutyh-tehnik/