Shanraq.org Shanraq.org
Словарь модуля: восемь слов, которыми говорит таблица
IT

Python: от данных до своей сводки Урок 25 из 56

Словарь модуля: восемь слов, которыми говорит таблица

Не урок, а справочная страница перед плотной частью модуля про pandas. Восемь слов — таблица, столбец, подпись и позиция, маска, пропуск, ключ, тип и форма — на одной таблице из трёх строк. Прочитайте один раз сейчас и возвращайтесь, когда слово встретится: рядом сказано, в каком уроке оно объясняется.

Как пользоваться этой страницей

Дальше идут семь уроков подряд, и они плотнее всего, что было. Каждый вводит свои понятия, но восемь слов повторяются во всех, и путаница в них стоит дороже, чем незнание любой отдельной функции.

Здесь они собраны вместе, на одной маленькой таблице. Это не урок: тут нет разминки, задания и разбора — только словарь. Пробегите его сейчас, не пытаясь запомнить, и возвращайтесь, когда слово встретится в деле. Каждое из восьми объясняется подробно в своём уроке, и рядом сказано, в каком.

pandas уже поставлен в предыдущем уроке; программу со страницы можно запустить сразу.

Восемь слов на одной таблице

"""Словарь модуля: восемь слов на одной маленькой таблице.

Три чека, два столбца и один пропуск. Этого хватает, чтобы показать все слова,
которыми говорят уроки про pandas.
"""

import pandas as pd

df = pd.DataFrame(
    {"city": ["Костанай", "Рудный", "Астана"], "amount": [4200.0, 16200.0, None]},
    index=[101, 102, 103],
)
df.index.name = "чек"
print(df)

print()
print("1. таблица:", type(df).__name__, "| 2. столбец:", type(df["city"]).__name__)
print("3. подписи строк:", df.index.tolist(), "| позиции: 0, 1, 2")
print("   loc[102] — по подписи:", df.loc[102, "city"])
print("   iloc[1]  — по позиции:", df.iloc[1]["city"])
print("4. маска:", (df["amount"] > 5000).tolist())
print("5. пропуск:", int(df["amount"].isna().sum()), "| сумма его не считает:", df["amount"].sum())
print("6. ключ — столбец без повторов; у city повторов:", int(df["city"].duplicated().sum()))
print("7. типы столбцов:", dict(df.dtypes.astype(str)))
print("8. форма:", df.shape, "— строк и столбцов")

Выводит:

         city   amount
чек                   
101  Костанай   4200.0
102    Рудный  16200.0
103    Астана      NaN

1. таблица: DataFrame | 2. столбец: Series
3. подписи строк: [101, 102, 103] | позиции: 0, 1, 2
   loc[102] — по подписи: Рудный
   iloc[1]  — по позиции: Рудный
4. маска: [False, True, False]
5. пропуск: 1 | сумма его не считает: 20400.0
6. ключ — столбец без повторов; у city повторов: 0
7. типы столбцов: {'city': 'str', 'amount': 'float64'}
8. форма: (3, 2) — строк и столбцов

Карта страницы: восемь слов

Что каждое из них значит

1. Таблица — DataFrame. Не список списков: у столбцов есть имена, у строк — подписи, и у каждого столбца свой тип. Подробно — в двадцать пятом уроке.

2. Столбец — Series. Значения плюс те же подписи. df["city"] — это Series, а df[["city", "amount"]] — снова таблица: в квадратных скобках список. Половина недоразумений в чужом коде — Series там, где ждали таблицу.

3. Подпись и позиция. Подпись — имя строки (у нас это номер чека: 101, 102, 103). Позиция — порядковый номер (0, 1, 2). loc спрашивает по подписи, iloc — по позиции. Пока подписи идут подряд от нуля, разницы не видно; она появляется после сортировки и фильтра — двадцать седьмой урок.

4. Маска. Сравнение со столбцом даёт не «да» или «нет», а столбец из «да» и «нет» — по ответу на строку. Им таблица и фильтруется: df[df["amount"] > 5000]. Соединяются маски знаками &, |, ~, каждая часть — в скобках.

5. Пропуск — NaN. Не ноль и не пустая строка: «здесь числа нет». В арифметике он заразен (NaN + 5 даёт NaN), а sum и mean его пропускают — поэтому в примере сумма 20 400, а не ошибка. Что с ним делать — тридцатый урок.

6. Ключ. Столбец, по которому таблицы соединяют: код страны, номер чека, дата. Годится тот, что не повторяется — иначе соединение размножит строки. Проверка одна: df["код"].duplicated().sum(). Соединение — двадцать девятый урок.

7. Тип столбца — dtype. int64, float64, str, datetime64, category. Тип решает, что со столбцом можно делать: у строки нет месяца, а сравнение строки с числом падает. Первое, что смотрят в чужом файле.

8. Форма — shape. Пара «строк, столбцов». Её смотрят до и после каждого действия: если после соединения или уборки число строк изменилось не так, как вы ожидали, дальше считать бессмысленно.

Три вопроса к любой чужой таблице

Прежде чем считать что бы то ни было:

df.shape          сколько строк и столбцов
df.dtypes         чем pandas считает каждый столбец
df.head(3)        как оно выглядит

Четвёртый — df.index: по чему подписаны строки. Половина странностей в чужом коде объясняется индексом, о котором забыли.

Куда дальше

Следующий урок — DataFrame и Series целиком: индекс, срезы, выравнивание по подписям. Дальше — чтение и запись, выборка, группировки, соединение, грязные данные и время в таблице. Если в каком-то уроке слово перестанет быть понятным, эта страница никуда не денется.

Если вы нашли ошибку или опечатку в тексте статьи, то сообщите нам об этом

Комментарии (0)

Пока нет комментариев. Будьте первым.