- Урок 1
- Урок 2
Урок 1
pandas — это библиотека для обработки и анализа данных в Python.
Проще говоря: она помогает удобно работать с таблицами данных, как в Microsoft Excel, но внутри Python 🐍.
Библиотека в программировании — это готовый набор кода, который написали другие разработчики, чтобы ты мог использовать его в своей программе и не писать всё с нуля.
Проще говоря:
📦 библиотека = коробка с полезными инструментами для программиста
Пример из жизни
Представь:
ты строишь дом 🏠
Можно:
самому делать кирпичи
самому делать окна
самому делать двери
А можно взять готовые материалы.
Вот библиотека — это готовые материалы для программы.
Простое объяснение
Представь, у тебя есть таблица:
| Имя | Возраст | Город |
|---|---|---|
| Ali | 20 | Bishkek |
| Dana | 22 | Almaty |
Без pandas работать с такими данными в Python неудобно.
С pandas — легко: можно фильтровать, считать статистику, изменять данные буквально одной строкой.
Зачем используют pandas
Вот основные задачи:
1️⃣ Читать данные из файлов
Например:
- Excel
- CSV
- базы данных
Пример:
import pandas as pd
df = pd.read_csv("data.csv")
2️⃣ Работать с таблицами как в Excel
Можно:
выбрать столбец
df["Возраст"]
отфильтровать строки
df[df["Возраст"] > 21]
3️⃣ Считать статистику автоматически
Например:
df.mean()
df.max()
df.min()
Очень удобно для анализа данных 📊
4️⃣ Чистить данные
В реальных данных часто есть:
- пустые значения
- ошибки
- дубликаты
pandas помогает исправить это быстро:
df.dropna()
df.drop_duplicates()
5️⃣ Группировать данные
Например:
средний возраст по городам
df.groupby("Город")["Возраст"].mean()
Когда pandas особенно полезен
Используют:
- аналитики данных
- программисты Python
- специалисты по машинному обучению
- экономисты
- маркетологи
Одним предложением
pandas = Excel внутри Python, но намного мощнее 🚀
Импорт pandas в программу
После установки нужно подключить библиотеку в коде:
import pandas
Теперь pandas подключена и готова к использованию ✅
Пример использования
import pandas
mydataset = {
'cars': ["BMW", "Volvo", "Ford"],
'passings': [3, 7, 2]
}
myvar = pandas.DataFrame(mydataset)
print(myvar)
Что делает этот код:
- создаёт таблицу данных
- превращает словарь в таблицу pandas
- выводит её на экран 📊
- Импорт pandas под коротким именем (alias)
Обычно pandas подключают так:
import pandas as pd
# alias (псевдоним) — это короткое имя для удобства.
# Теперь вместо:
pandas.DataFrame()
# можно писать:
pd.DataFrame()
# Так быстрее и удобнее 👍
Пример с alias
import pandas as pd
mydataset = {
'cars': ["BMW", "Volvo", "Ford"],
'passings': [3, 7, 2]
}
myvar = pd.DataFrame(mydataset)
print(myvar)
Результат будет таким же.
Как узнать версию pandas
Версия библиотеки хранится в специальном поле version:
import pandas as pd
print(pd.__version__)
Это покажет установленную версию pandas 📦
Что такое DataFrame?
📊 DataFrame = таблица со строками и столбцами
Простой пример:
Вот обычная таблица:
Имя Возраст Город
Ali 20 Bishkek
Dana 22 Almaty
В pandas такая таблица называется DataFrame.
Поиск строки (Locate Row)
Как вы уже видели ранее, DataFrame — это таблица со строками и столбцами.
В библиотеке pandas используется атрибут loc, чтобы получить одну или несколько нужных строк.
Пример: получить строку с индексом 0
print(df.loc[0])
Результат:
calories 420
duration 50
Name: 0, dtype: int64
Это означает: вы получили строку номер 0 из таблицы.
Пример: получить строки 0 и 1
Можно указать список индексов:
print(df.loc[[0, 1]])
Результат:
calories duration
0 420 50
1 380 40
То есть pandas вернул две строки сразу.
Именованные индексы (Named Indexes)
С помощью параметра index вы можете задать собственные имена строк.
Пример:
import pandas as pd
data = {
"calories": [420, 380, 390],
"duration": [50, 40, 45]
}
df = pd.DataFrame(data, index=["day1", "day2", "day3"])
print(df)
Результат:
calories duration
day1 420 50
day2 380 40
day3 390 45
Теперь строки имеют имена:
- day1
- day2
- day3
Поиск строки по имени индекса
Можно использовать имя строки вместе с loc.
Пример: получить строку day2
print(df.loc["day2"])
Результат:
calories 380
duration 40
Name: day2, dtype: int64
То есть pandas вернул строку с именем day2.
Загрузка файлов в DataFrame
Если ваши данные находятся в файле, pandas может загрузить их прямо в DataFrame.
Пример: загрузка файла CSV
import pandas as pd
df = pd.read_csv("data.csv")
print(df)
Здесь функция read_csv():
- открывает файл
- читает данные
- превращает их в таблицу DataFrame 📊
Это один из самых частых способов использования pandas в реальных задачах.
Чтение CSV-файлов
Простой способ хранить большие наборы данных — использовать CSV-файлы (файлы со значениями, разделёнными запятыми).
CSV-файлы содержат обычный текст и являются распространённым форматом, который могут читать многие программы, включая библиотеку pandas.
В примерах используется файл с названием data.csv.
Пример: загрузка CSV-файла в DataFrame
import pandas as pd
df = pd.read_csv("data.csv")
print(df.to_string())
Здесь:
- функция
read_csv()загружает файл - данные превращаются в DataFrame
- метод
to_string()выводит всю таблицу полностью
💡 Совет: используйте to_string(), если хотите увидеть весь DataFrame целиком.
Если таблица большая
Если DataFrame содержит много строк, pandas по умолчанию показывает только:
- первые 5 строк
- последние 5 строк
Пример:
import pandas as pd
df = pd.read_csv("data.csv")
print(df)
В этом случае pandas выводит не всю таблицу, а только её начало и конец, чтобы результат было удобнее читать 📊
Анализ DataFrame в pandas
Просмотр данных
Один из самых часто используемых методов для быстрого просмотра содержимого DataFrame — это метод head().
Метод head() показывает:
- названия столбцов
- первые несколько строк таблицы (сверху)
Пример: показать первые 10 строк таблицы
import pandas as pd
df = pd.read_csv("data.csv")
print(df.head(10))
Этот код выводит первые 10 строк таблицы.
В примерах используется файл data.csv.
Важно
Если вы не укажете количество строк, метод head() по умолчанию покажет первые 5 строк.
Пример:
import pandas as pd
df = pd.read_csv("data.csv")
print(df.head())
Этот код выводит первые 5 строк таблицы.
Просмотр последних строк таблицы
Также существует метод tail(), который показывает последние строки таблицы.
Метод tail() выводит:
- названия столбцов
- несколько строк снизу таблицы
Пример: показать последние 5 строк таблицы
print(df.tail())
По умолчанию этот метод показывает последние 5 строк DataFrame 📊
Информация о данных
Объект DataFrame имеет метод info(), который показывает подробную информацию о наборе данных.
Пример: вывести информацию о данных
print(df.info())
Результат может выглядеть так:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 169 entries, 0 to 168
Data columns (total 4 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Duration 169 non-null int64
1 Pulse 169 non-null int64
2 Maxpulse 169 non-null int64
3 Calories 164 non-null float64
dtypes: float64(1), int64(3)
memory usage: 5.4 KB
None
Что это значит
- В таблице 169 строк и 4 столбца:
RangeIndex: 169 entries, 0 to 168
Data columns (total 4 columns)
- Название каждого столбца и тип данных:
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Duration 169 non-null int64
1 Pulse 169 non-null int64
2 Maxpulse 169 non-null int64
3 Calories 164 non-null float64
Пустые значения (Null values)
Метод info() показывает, сколько значений не пустых (Non-Null) в каждом столбце.
В нашем примере столбец "Calories" имеет 164 непустых значения из 169, значит 5 строк пустые в этом столбце.
Почему это важно
Пустые значения могут мешать анализу данных.
Часто их нужно удалять или заполнять — это часть процесса, который называется очистка данных (data cleaning).
Вы научитесь этому в следующих разделах.
Урок 2
Pandas — Очистка данных (Cleaning Data)
Очистка данных означает исправление некорректных данных в вашем наборе данных.
Плохие данные могут быть такими:
- пустые ячейки
- данные в неправильном формате
- неверные значения
- дубликаты
Наш набор данных
В следующих главах будет использоваться такой набор данных:
Duration Date Pulse Maxpulse Calories
0 60 '2020/12/01' 110 130 409.1
1 60 '2020/12/02' 117 145 479.0
2 60 '2020/12/03' 103 135 340.0
3 45 '2020/12/04' 109 175 282.4
4 45 '2020/12/05' 117 148 406.0
5 60 '2020/12/06' 102 127 300.0
6 60 '2020/12/07' 110 136 374.0
7 450 '2020/12/08' 104 134 253.3
8 30 '2020/12/09' 109 133 195.1
9 60 '2020/12/10' 98 124 269.0
10 60 '2020/12/11' 103 147 329.3
11 60 '2020/12/12' 100 120 250.7
12 60 '2020/12/12' 100 120 250.7
13 60 '2020/12/13' 106 128 345.3
14 60 '2020/12/14' 104 132 379.3
15 60 '2020/12/15' 98 123 275.0
16 60 '2020/12/16' 98 120 215.2
17 60 '2020/12/17' 100 120 300.0
18 45 '2020/12/18' 90 112 NaN
19 60 '2020/12/19' 103 123 323.0
20 45 '2020/12/20' 97 125 243.0
21 60 '2020/12/21' 108 131 364.2
22 45 NaN 100 119 282.0
23 60 '2020/12/23' 130 101 300.0
24 45 '2020/12/24' 105 132 246.0
25 60 '2020/12/25' 102 126 334.5
26 60 2020/12/26 100 120 250.0
27 60 '2020/12/27' 92 118 241.0
28 60 '2020/12/28' 103 132 NaN
29 60 '2020/12/29' 100 132 280.0
30 60 '2020/12/30' 102 129 380.3
31 60 '2020/12/31' 92 115 243.0
В наборе данных есть:
- пустые ячейки (например, Date в строке 22 и Calories в строках 18 и 28)
- неправильный формат данных (Date в строке 26)
- неверные данные (Duration в строке 7)
- дубликаты (строки 11 и 12)
Очистка пустых ячеек (Cleaning Empty Cells)
Пустые ячейки
Пустые ячейки могут привести к неверным результатам при анализе данных ⚠️
Удаление строк
Один из способов работы с пустыми значениями — удалить строки, которые их содержат.
Обычно это нормально, потому что наборы данных часто очень большие, и удаление нескольких строк почти не влияет на результат.
Создать новый DataFrame без пустых ячеек
import pandas as pd
df = pd.read_csv('data.csv')
new_df = df.dropna()
print(new_df.to_string())
📌 По умолчанию dropna() создаёт новый DataFrame и не изменяет исходный.
Изменение исходного DataFrame
Если нужно изменить оригинальный DataFrame:
import pandas as pd
df = pd.read_csv('data.csv')
df.dropna(inplace=True)
print(df.to_string())
Теперь:
dropna(inplace=True)
удаляет строки с пустыми значениями прямо в исходном DataFrame.
Замена пустых значений
Другой способ работы с пустыми ячейками — заменить их значением вместо удаления строки.
Это удобно 👍
Замена NULL значений числом 130
import pandas as pd
df = pd.read_csv('data.csv')
df.fillna(130, inplace=True)
Замена только в определённом столбце
Например, заменить пустые значения только в столбце Calories:
import pandas as pd
df = pd.read_csv('data.csv')
df.fillna({"Calories": 130}, inplace=True)
Замена через среднее, медиану или моду
Часто пустые значения заменяют статистическими показателями столбца:
- среднее значение (mean)
- медиана (median)
- мода (mode)
Замена через среднее значение (Mean)
import pandas as pd
df = pd.read_csv('data.csv')
x = df["Calories"].mean()
df.fillna({"Calories": x}, inplace=True)
📌 Mean (среднее) — сумма всех значений, делённая на их количество.
Замена через медиану (Median)
import pandas as pd
df = pd.read_csv('data.csv')
x = df["Calories"].median()
df.fillna({"Calories": x}, inplace=True)
📌 Median (медиана) — значение посередине отсортированного списка.
Замена через моду (Mode)
import pandas as pd
df = pd.read_csv('data.csv')
x = df["Calories"].mode()[0]
df.fillna({"Calories": x}, inplace=True)
📌 Mode (мода) — наиболее часто встречающееся значение в столбце.
Pandas — Очистка данных с неправильным форматом (Cleaning Data of Wrong Format)
Данные неправильного формата
Ячейки с неправильным форматом данных могут затруднить анализ данных или сделать его невозможным ❗
Чтобы исправить это, есть два варианта:
- удалить строки с неправильным форматом
- привести все значения столбца к одному формату
Преобразование в правильный формат
В нашем DataFrame есть две проблемные строки:
- строка 22 — пустая дата
- строка 26 — дата записана как число
20201226вместо строки'2020/12/26'
Столбец Date должен содержать даты в одном формате.
Преобразование столбца Date в формат даты
В Pandas есть метод:
to_datetime()
Он преобразует значения в формат даты.
Пример:
import pandas as pd
df = pd.read_csv('data.csv')
df['Date'] = pd.to_datetime(df['Date'], format='mixed')
print(df.to_string())
📌 Параметр:
format='mixed'
означает, что Pandas автоматически распознаёт разные форматы дат.
Результат преобразования
После выполнения:
- дата в строке 26 исправляется автоматически
- пустая дата в строке 22 становится значением:
NaT
📌 NaT означает:
Not a Time
Это аналог NaN, но для дат.
Удаление строк с неправильными датами
Так как NaT считается пустым значением, можно удалить строки через:
dropna()
Удалим строки, где отсутствует дата:
df.dropna(subset=['Date'], inplace=True)
📌 Здесь:
subset=['Date']
означает:
удалить только те строки, где пустое значение именно в столбце Date, а не во всём DataFrame.
Итоговая логика работы с неправильным форматом дат
Обычно делают так:
1️⃣ приводят столбец к формату даты
pd.to_datetime()
2️⃣ проверяют ошибки (NaT)
3️⃣ удаляют строки или заменяют значения
dropna(subset=['Date'])
Это стандартный workflow очистки дат в анализе данных 📊
Pandas — Исправление неправильных данных (Fixing Wrong Data)
Неправильные данные (Wrong Data)
Неправильные данные — это не обязательно:
- пустые значения
- неправильный формат
Иногда данные просто ошибочные по смыслу.
Пример:
вместо 1.99 могли случайно записать 199.
Такие ошибки обычно обнаруживаются логически — когда вы знаете, какие значения ожидаются.
Пример ошибки в нашем наборе данных
Посмотрите строку 7:
Duration = 450
Но остальные значения находятся в диапазоне:
30–60 минут
Поскольку это данные тренировок, маловероятно, что тренировка длилась 450 минут (7.5 часов) 😄
Значит — это ошибка.
Способ 1: Замена значения вручную
Можно заменить неправильное значение:
df.loc[7, 'Duration'] = 45
📌 Здесь:
-
7— номер строки -
'Duration'— имя столбца -
45— новое значение
Этот способ подходит для маленьких наборов данных.
Способ 2: Замена по правилу (для больших наборов данных)
Можно задать границы допустимых значений.
Например:
если значение больше 120 минут, заменить его на 120
for x in df.index:
if df.loc[x, "Duration"] > 120:
df.loc[x, "Duration"] = 120
📌 Что делает код:
1️⃣ проходит по всем строкам
2️⃣ проверяет значение столбца Duration
3️⃣ если больше 120 → заменяет на 120
Это удобно для автоматической очистки данных.
Способ 3: Удаление строк с ошибочными значениями
Иногда проще удалить неправильные строки.
Пример:
удаляем строки, где Duration > 120
for x in df.index:
if df.loc[x, "Duration"] > 120:
df.drop(x, inplace=True)
📌 Это полезно, когда:
- значение невозможно восстановить
- данных достаточно
- ошибка влияет на анализ
Как обычно делают в реальной практике 📊
Типичный workflow:
1️⃣ найти подозрительные значения
например:
Duration > 120
2️⃣ выбрать стратегию:
- заменить значением
- заменить средним значением
- ограничить диапазоном
- удалить строки
3️⃣ проверить результат анализа
Отлично 👍 Сейчас покажу профессиональный pandas-способ без цикла for, который используют в реальных проектах и который часто ожидают увидеть на интервью.
Работа через циклы (for) в Pandas считается неэффективной, потому что pandas оптимизирован для векторных операций.
💡 Как делают опытные аналитики обычно
1️⃣ Самый правильный способ: фильтрация через условие
Например:
заменить все значения Duration > 120 на 120
df.loc[df["Duration"] > 120, "Duration"] = 120
📌 Что происходит:
df["Duration"] > 120
создаёт логическую маску:
False False False False False False False True False ...
А затем:
df.loc[условие, столбец]
меняет только нужные строки.
✅ быстро
✅ читаемо
✅ используется в production-коде
2️⃣ Удаление строк через фильтрацию (без цикла)
Удалим строки, где Duration > 120
df = df[df["Duration"] <= 120]
Это означает:
оставить только строки, где условие выполняется.
Pandas — Удаление дубликатов (Removing Duplicates)
Поиск дубликатов (Discovering Duplicates)
Дубликаты — это строки, которые были записаны более одного раза.
В нашем наборе данных видно, что строки:
11 и 12
полностью одинаковые — значит это дубликаты.
Как найти дубликаты
В pandas используется метод:
df.duplicated()
Он возвращает логические значения (True / False) для каждой строки:
-
True→ строка является дубликатом -
False→ строка уникальная
Пример:
print(df.duplicated())
Результат будет примерно таким:
False
False
False
...
False
True
...
📌 Обычно True появляется начиная со второго повторения строки (первая считается оригиналом).
Как удалить дубликаты
Чтобы удалить дубликаты, используется метод:
df.drop_duplicates()
Пример:
df.drop_duplicates(inplace=True)
📌 Параметр:
inplace=True
означает:
изменить исходный DataFrame, а не создавать новый.
Удаление дубликатов только по определённым столбцам
Иногда строки считаются дубликатами не полностью, а только по части столбцов.
Например:
удалить дубликаты только по столбцу Date
df.drop_duplicates(subset=["Date"], inplace=True)
📌 Это оставит только одну строку на каждую дату.
Как обычно работают аналитики 📊
Типичный workflow:
1️⃣ найти дубликаты
df[df.duplicated()]
2️⃣ посмотреть их вручную 👀
3️⃣ удалить
df.drop_duplicates(inplace=True)
Это стандартный шаг очистки данных перед анализом.
Top comments (0)