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)
Войдите, чтобы оставить комментарий →
Пока нет комментариев. Будьте первым.