DEV Community

Erlan Akbaraliev
Erlan Akbaraliev

Posted on • Edited on

Pandas

  • Урок 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")
Enter fullscreen mode Exit fullscreen mode

2️⃣ Работать с таблицами как в Excel

Можно:

выбрать столбец

df["Возраст"]
Enter fullscreen mode Exit fullscreen mode

отфильтровать строки

df[df["Возраст"] > 21]
Enter fullscreen mode Exit fullscreen mode

3️⃣ Считать статистику автоматически

Например:

df.mean()
df.max()
df.min()
Enter fullscreen mode Exit fullscreen mode

Очень удобно для анализа данных 📊


4️⃣ Чистить данные

В реальных данных часто есть:

  • пустые значения
  • ошибки
  • дубликаты

pandas помогает исправить это быстро:

df.dropna()
df.drop_duplicates()
Enter fullscreen mode Exit fullscreen mode

5️⃣ Группировать данные

Например:

средний возраст по городам

df.groupby("Город")["Возраст"].mean()
Enter fullscreen mode Exit fullscreen mode

Когда pandas особенно полезен

Используют:

  • аналитики данных
  • программисты Python
  • специалисты по машинному обучению
  • экономисты
  • маркетологи

Одним предложением

pandas = Excel внутри Python, но намного мощнее 🚀


Импорт pandas в программу

После установки нужно подключить библиотеку в коде:

import pandas

Теперь pandas подключена и готова к использованию 

Пример использования
Enter fullscreen mode Exit fullscreen mode
import pandas

mydataset = {
  'cars': ["BMW", "Volvo", "Ford"],
  'passings': [3, 7, 2]
}

myvar = pandas.DataFrame(mydataset)

print(myvar)
Enter fullscreen mode Exit fullscreen mode

Что делает этот код:

  • создаёт таблицу данных
  • превращает словарь в таблицу pandas
  • выводит её на экран 📊
  • Импорт pandas под коротким именем (alias)

Обычно pandas подключают так:

import pandas as pd

# alias (псевдоним) — это короткое имя для удобства.
# Теперь вместо:

pandas.DataFrame()
# можно писать:
pd.DataFrame()

# Так быстрее и удобнее 👍
Enter fullscreen mode Exit fullscreen mode

Пример с alias

import pandas as pd

mydataset = {
  'cars': ["BMW", "Volvo", "Ford"],
  'passings': [3, 7, 2]
}

myvar = pd.DataFrame(mydataset)

print(myvar)
Enter fullscreen mode Exit fullscreen mode

Результат будет таким же.

Как узнать версию pandas

Версия библиотеки хранится в специальном поле version:

import pandas as pd

print(pd.__version__)
Enter fullscreen mode Exit fullscreen mode

Это покажет установленную версию pandas 📦


Что такое DataFrame?

📊 DataFrame = таблица со строками и столбцами

Простой пример:

Вот обычная таблица:

Имя  Возраст  Город
Ali 20  Bishkek
Dana    22  Almaty
Enter fullscreen mode Exit fullscreen mode

В pandas такая таблица называется DataFrame.


Поиск строки (Locate Row)

Как вы уже видели ранее, DataFrame — это таблица со строками и столбцами.

В библиотеке pandas используется атрибут loc, чтобы получить одну или несколько нужных строк.


Пример: получить строку с индексом 0

print(df.loc[0])
Enter fullscreen mode Exit fullscreen mode

Результат:

calories    420
duration     50
Name: 0, dtype: int64
Enter fullscreen mode Exit fullscreen mode

Это означает: вы получили строку номер 0 из таблицы.


Пример: получить строки 0 и 1

Можно указать список индексов:

print(df.loc[[0, 1]])
Enter fullscreen mode Exit fullscreen mode

Результат:

   calories  duration
0       420        50
1       380        40
Enter fullscreen mode Exit fullscreen mode

То есть 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)
Enter fullscreen mode Exit fullscreen mode

Результат:

      calories  duration
day1       420        50
day2       380        40
day3       390        45
Enter fullscreen mode Exit fullscreen mode

Теперь строки имеют имена:

  • day1
  • day2
  • day3

Поиск строки по имени индекса

Можно использовать имя строки вместе с loc.

Пример: получить строку day2

print(df.loc["day2"])
Enter fullscreen mode Exit fullscreen mode

Результат:

calories    380
duration     40
Name: day2, dtype: int64
Enter fullscreen mode Exit fullscreen mode

То есть pandas вернул строку с именем day2.


Загрузка файлов в DataFrame

Если ваши данные находятся в файле, pandas может загрузить их прямо в DataFrame.

Пример: загрузка файла CSV

import pandas as pd

df = pd.read_csv("data.csv")

print(df)
Enter fullscreen mode Exit fullscreen mode

Здесь функция 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())
Enter fullscreen mode Exit fullscreen mode

Здесь:

  • функция read_csv() загружает файл
  • данные превращаются в DataFrame
  • метод to_string() выводит всю таблицу полностью

💡 Совет: используйте to_string(), если хотите увидеть весь DataFrame целиком.


Если таблица большая

Если DataFrame содержит много строк, pandas по умолчанию показывает только:

  • первые 5 строк
  • последние 5 строк

Пример:

import pandas as pd

df = pd.read_csv("data.csv")

print(df)
Enter fullscreen mode Exit fullscreen mode

В этом случае pandas выводит не всю таблицу, а только её начало и конец, чтобы результат было удобнее читать 📊


Анализ DataFrame в pandas

Просмотр данных

Один из самых часто используемых методов для быстрого просмотра содержимого DataFrame — это метод head().

Метод head() показывает:

  • названия столбцов
  • первые несколько строк таблицы (сверху)

Пример: показать первые 10 строк таблицы

import pandas as pd

df = pd.read_csv("data.csv")

print(df.head(10))
Enter fullscreen mode Exit fullscreen mode

Этот код выводит первые 10 строк таблицы.

В примерах используется файл data.csv.


Важно

Если вы не укажете количество строк, метод head() по умолчанию покажет первые 5 строк.

Пример:

import pandas as pd

df = pd.read_csv("data.csv")

print(df.head())
Enter fullscreen mode Exit fullscreen mode

Этот код выводит первые 5 строк таблицы.


Просмотр последних строк таблицы

Также существует метод tail(), который показывает последние строки таблицы.

Метод tail() выводит:

  • названия столбцов
  • несколько строк снизу таблицы

Пример: показать последние 5 строк таблицы

print(df.tail())
Enter fullscreen mode Exit fullscreen mode

По умолчанию этот метод показывает последние 5 строк DataFrame 📊


Информация о данных

Объект DataFrame имеет метод info(), который показывает подробную информацию о наборе данных.


Пример: вывести информацию о данных

print(df.info())
Enter fullscreen mode Exit fullscreen mode

Результат может выглядеть так:

<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
Enter fullscreen mode Exit fullscreen mode

Что это значит

  • В таблице 169 строк и 4 столбца:
RangeIndex: 169 entries, 0 to 168
Data columns (total 4 columns)
Enter fullscreen mode Exit fullscreen mode
  • Название каждого столбца и тип данных:
 #   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
Enter fullscreen mode Exit fullscreen mode

Пустые значения (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
Enter fullscreen mode Exit fullscreen mode

В наборе данных есть:

  • пустые ячейки (например, 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())
Enter fullscreen mode Exit fullscreen mode

📌 По умолчанию dropna() создаёт новый DataFrame и не изменяет исходный.


Изменение исходного DataFrame

Если нужно изменить оригинальный DataFrame:

import pandas as pd

df = pd.read_csv('data.csv')

df.dropna(inplace=True)

print(df.to_string())
Enter fullscreen mode Exit fullscreen mode

Теперь:

dropna(inplace=True)
удаляет строки с пустыми значениями прямо в исходном DataFrame.


Замена пустых значений

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

Это удобно 👍

Замена NULL значений числом 130

import pandas as pd

df = pd.read_csv('data.csv')

df.fillna(130, inplace=True)
Enter fullscreen mode Exit fullscreen mode

Замена только в определённом столбце

Например, заменить пустые значения только в столбце Calories:

import pandas as pd

df = pd.read_csv('data.csv')

df.fillna({"Calories": 130}, inplace=True)
Enter fullscreen mode Exit fullscreen mode

Замена через среднее, медиану или моду

Часто пустые значения заменяют статистическими показателями столбца:

  • среднее значение (mean)
  • медиана (median)
  • мода (mode)

Замена через среднее значение (Mean)

import pandas as pd

df = pd.read_csv('data.csv')

x = df["Calories"].mean()

df.fillna({"Calories": x}, inplace=True)
Enter fullscreen mode Exit fullscreen mode

📌 Mean (среднее) — сумма всех значений, делённая на их количество.


Замена через медиану (Median)

import pandas as pd

df = pd.read_csv('data.csv')

x = df["Calories"].median()

df.fillna({"Calories": x}, inplace=True)
Enter fullscreen mode Exit fullscreen mode

📌 Median (медиана) — значение посередине отсортированного списка.


Замена через моду (Mode)

import pandas as pd

df = pd.read_csv('data.csv')

x = df["Calories"].mode()[0]

df.fillna({"Calories": x}, inplace=True)
Enter fullscreen mode Exit fullscreen mode

📌 Mode (мода) — наиболее часто встречающееся значение в столбце.


Pandas — Очистка данных с неправильным форматом (Cleaning Data of Wrong Format)

Данные неправильного формата

Ячейки с неправильным форматом данных могут затруднить анализ данных или сделать его невозможным ❗

Чтобы исправить это, есть два варианта:

  • удалить строки с неправильным форматом
  • привести все значения столбца к одному формату

Преобразование в правильный формат

В нашем DataFrame есть две проблемные строки:

  • строка 22 — пустая дата
  • строка 26 — дата записана как число 20201226 вместо строки '2020/12/26'

Столбец Date должен содержать даты в одном формате.


Преобразование столбца Date в формат даты

В Pandas есть метод:

to_datetime()
Enter fullscreen mode Exit fullscreen mode

Он преобразует значения в формат даты.

Пример:

import pandas as pd

df = pd.read_csv('data.csv')

df['Date'] = pd.to_datetime(df['Date'], format='mixed')

print(df.to_string())
Enter fullscreen mode Exit fullscreen mode

📌 Параметр:

format='mixed'
Enter fullscreen mode Exit fullscreen mode

означает, что Pandas автоматически распознаёт разные форматы дат.


Результат преобразования

После выполнения:

  • дата в строке 26 исправляется автоматически
  • пустая дата в строке 22 становится значением:
NaT
Enter fullscreen mode Exit fullscreen mode

📌 NaT означает:

Not a Time
Enter fullscreen mode Exit fullscreen mode

Это аналог NaN, но для дат.


Удаление строк с неправильными датами

Так как NaT считается пустым значением, можно удалить строки через:

dropna()
Enter fullscreen mode Exit fullscreen mode

Удалим строки, где отсутствует дата:

df.dropna(subset=['Date'], inplace=True)
Enter fullscreen mode Exit fullscreen mode

📌 Здесь:

subset=['Date']
Enter fullscreen mode Exit fullscreen mode

означает:

удалить только те строки, где пустое значение именно в столбце Date, а не во всём DataFrame.


Итоговая логика работы с неправильным форматом дат

Обычно делают так:

1️⃣ приводят столбец к формату даты

pd.to_datetime()
Enter fullscreen mode Exit fullscreen mode

2️⃣ проверяют ошибки (NaT)

3️⃣ удаляют строки или заменяют значения

dropna(subset=['Date'])
Enter fullscreen mode Exit fullscreen mode

Это стандартный workflow очистки дат в анализе данных 📊


Pandas — Исправление неправильных данных (Fixing Wrong Data)

Неправильные данные (Wrong Data)

Неправильные данные — это не обязательно:

  • пустые значения
  • неправильный формат

Иногда данные просто ошибочные по смыслу.

Пример:
вместо 1.99 могли случайно записать 199.

Такие ошибки обычно обнаруживаются логически — когда вы знаете, какие значения ожидаются.


Пример ошибки в нашем наборе данных

Посмотрите строку 7:

Duration = 450
Enter fullscreen mode Exit fullscreen mode

Но остальные значения находятся в диапазоне:

30–60 минут
Enter fullscreen mode Exit fullscreen mode

Поскольку это данные тренировок, маловероятно, что тренировка длилась 450 минут (7.5 часов) 😄

Значит — это ошибка.


Способ 1: Замена значения вручную

Можно заменить неправильное значение:

df.loc[7, 'Duration'] = 45
Enter fullscreen mode Exit fullscreen mode

📌 Здесь:

  • 7 — номер строки
  • 'Duration' — имя столбца
  • 45 — новое значение

Этот способ подходит для маленьких наборов данных.


Способ 2: Замена по правилу (для больших наборов данных)

Можно задать границы допустимых значений.

Например:

если значение больше 120 минут, заменить его на 120

for x in df.index:
    if df.loc[x, "Duration"] > 120:
        df.loc[x, "Duration"] = 120
Enter fullscreen mode Exit fullscreen mode

📌 Что делает код:

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)
Enter fullscreen mode Exit fullscreen mode

📌 Это полезно, когда:

  • значение невозможно восстановить
  • данных достаточно
  • ошибка влияет на анализ

Как обычно делают в реальной практике 📊

Типичный workflow:

1️⃣ найти подозрительные значения

например:

Duration > 120
Enter fullscreen mode Exit fullscreen mode

2️⃣ выбрать стратегию:

  • заменить значением
  • заменить средним значением
  • ограничить диапазоном
  • удалить строки

3️⃣ проверить результат анализа


Отлично 👍 Сейчас покажу профессиональный pandas-способ без цикла for, который используют в реальных проектах и который часто ожидают увидеть на интервью.

Работа через циклы (for) в Pandas считается неэффективной, потому что pandas оптимизирован для векторных операций.


💡 Как делают опытные аналитики обычно

1️⃣ Самый правильный способ: фильтрация через условие

Например:

заменить все значения Duration > 120 на 120

df.loc[df["Duration"] > 120, "Duration"] = 120
Enter fullscreen mode Exit fullscreen mode

📌 Что происходит:

df["Duration"] > 120
Enter fullscreen mode Exit fullscreen mode

создаёт логическую маску:

False False False False False False False True False ...
Enter fullscreen mode Exit fullscreen mode

А затем:

df.loc[условие, столбец]
Enter fullscreen mode Exit fullscreen mode

меняет только нужные строки.

✅ быстро
✅ читаемо
✅ используется в production-коде


2️⃣ Удаление строк через фильтрацию (без цикла)

Удалим строки, где Duration > 120

df = df[df["Duration"] <= 120]
Enter fullscreen mode Exit fullscreen mode

Это означает:

оставить только строки, где условие выполняется.


Pandas — Удаление дубликатов (Removing Duplicates)

Поиск дубликатов (Discovering Duplicates)

Дубликаты — это строки, которые были записаны более одного раза.

В нашем наборе данных видно, что строки:

11 и 12
Enter fullscreen mode Exit fullscreen mode

полностью одинаковые — значит это дубликаты.


Как найти дубликаты

В pandas используется метод:

df.duplicated()
Enter fullscreen mode Exit fullscreen mode

Он возвращает логические значения (True / False) для каждой строки:

  • True → строка является дубликатом
  • False → строка уникальная

Пример:

print(df.duplicated())
Enter fullscreen mode Exit fullscreen mode

Результат будет примерно таким:

False
False
False
...
False
True
...
Enter fullscreen mode Exit fullscreen mode

📌 Обычно True появляется начиная со второго повторения строки (первая считается оригиналом).


Как удалить дубликаты

Чтобы удалить дубликаты, используется метод:

df.drop_duplicates()
Enter fullscreen mode Exit fullscreen mode

Пример:

df.drop_duplicates(inplace=True)
Enter fullscreen mode Exit fullscreen mode

📌 Параметр:

inplace=True
Enter fullscreen mode Exit fullscreen mode

означает:

изменить исходный DataFrame, а не создавать новый.


Удаление дубликатов только по определённым столбцам

Иногда строки считаются дубликатами не полностью, а только по части столбцов.

Например:

удалить дубликаты только по столбцу Date

df.drop_duplicates(subset=["Date"], inplace=True)
Enter fullscreen mode Exit fullscreen mode

📌 Это оставит только одну строку на каждую дату.


Как обычно работают аналитики 📊

Типичный workflow:

1️⃣ найти дубликаты

df[df.duplicated()]
Enter fullscreen mode Exit fullscreen mode

2️⃣ посмотреть их вручную 👀

3️⃣ удалить

df.drop_duplicates(inplace=True)
Enter fullscreen mode Exit fullscreen mode

Это стандартный шаг очистки данных перед анализом.

Top comments (0)