мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| python:week20 [01/10/2018 03:07] – [Что pandas умеет?] ybezrukov | python:week20 [04/04/2021 21:56] (текущий) – [Ввод/вывод] Admin Adminovich | ||
|---|---|---|---|
| Строка 44: | Строка 44: | ||
| 5 8.0 | 5 8.0 | ||
| dtype: float64 | dtype: float64 | ||
| + | </ | ||
| + | |||
| + | |||
| + | При создании объекта можно не полагаться на автоматический генератор индекса из pangas и указать свой. | ||
| + | |||
| + | Сначала создадим диапазон дан с помощью функции date_range из pandas | ||
| + | |||
| + | <code python> | ||
| + | dates = pd.date_range(' | ||
| + | print(dates) | ||
| + | |||
| + | df = pd.DataFrame(np.random.randn(6, | ||
| + | print(df) | ||
| + | |||
| + | </ | ||
| + | |||
| + | < | ||
| + | | ||
| + | 2013-01-01 | ||
| + | 2013-01-02 | ||
| + | 2013-01-03 -0.861849 -2.104569 -0.494929 | ||
| + | 2013-01-04 | ||
| + | 2013-01-05 -0.424972 | ||
| + | 2013-01-06 -0.673690 | ||
| + | </ | ||
| + | |||
| + | При создании датафрейма можно передать словарь объектов, | ||
| + | |||
| + | |||
| + | <code python> | ||
| + | df2 = pd.DataFrame({ ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | ' | ||
| + | |||
| + | print(df2) | ||
| + | |||
| + | </ | ||
| + | |||
| + | < | ||
| + | | ||
| + | 0 1.0 2013-01-02 | ||
| + | 1 1.0 2013-01-02 | ||
| + | 2 1.0 2013-01-02 | ||
| + | 3 1.0 2013-01-02 | ||
| + | </ | ||
| + | |||
| + | Каждая колонка в датафрейме имеет свой тип, который определен внутри pandas. Узнать его можно с помощью функции dtypes | ||
| + | |||
| + | <code python> | ||
| + | | ||
| + | print(df2.dtypes) | ||
| + | |||
| + | </ | ||
| + | |||
| + | |||
| + | < | ||
| + | A | ||
| + | B datetime64[ns] | ||
| + | C | ||
| + | D int32 | ||
| + | E category | ||
| + | F object | ||
| + | dtype: object | ||
| + | </ | ||
| + | |||
| + | ====== Просмотр данных ====== | ||
| + | |||
| + | Просмотрим начальные и конечные строки в датафрейме. Функция head без аргументов вернет 5 первых строк, а tails с аргументом 3 - три последних | ||
| + | |||
| + | <code python> | ||
| + | | ||
| + | print(df.head()) | ||
| + | |||
| + | </ | ||
| + | |||
| + | < | ||
| + | | ||
| + | 2013-01-01 | ||
| + | 2013-01-02 | ||
| + | 2013-01-03 -0.861849 -2.104569 -0.494929 | ||
| + | 2013-01-04 | ||
| + | 2013-01-05 -0.424972 | ||
| + | </ | ||
| + | |||
| + | |||
| + | <code python> | ||
| + | | ||
| + | print(df.tail(3)) | ||
| + | |||
| + | </ | ||
| + | |||
| + | < | ||
| + | | ||
| + | 2013-01-04 | ||
| + | 2013-01-05 -0.424972 | ||
| + | 2013-01-06 -0.673690 | ||
| + | </ | ||
| + | |||
| + | |||
| + | С помощью функций index, columns и values можно просмотреть значения индексов (имена строк), | ||
| + | <code python> | ||
| + | | ||
| + | print(df.index) | ||
| + | print(df.columns) | ||
| + | print(df.values) | ||
| + | |||
| + | </ | ||
| + | |||
| + | Функция describe() покажет краткую сводку о данных | ||
| + | <code python> | ||
| + | print(df.describe()) | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | A | ||
| + | count 6.000000 | ||
| + | mean | ||
| + | std 0.843157 | ||
| + | min | ||
| + | 25% | ||
| + | 50% 0.022070 -0.228039 -0.767252 -0.386188 # 50 перцентиль или медиана | ||
| + | 75% 0.658444 | ||
| + | max 1.212112 | ||
| + | </ | ||
| + | |||
| + | Транспонировать таблицу (отразить относительно диагонали) | ||
| + | |||
| + | <code python> | ||
| + | print(df.T) | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | | ||
| + | A 0.469112 | ||
| + | B | ||
| + | C | ||
| + | D | ||
| + | </ | ||
| + | |||
| + | Упорядочить по направлению (например, | ||
| + | |||
| + | <code python> | ||
| + | print(df.sort_index(axis=1, | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | | ||
| + | 2013-01-01 -1.135632 -1.509059 -0.282863 | ||
| + | 2013-01-02 -1.044236 | ||
| + | 2013-01-03 | ||
| + | 2013-01-04 | ||
| + | 2013-01-05 -1.087401 | ||
| + | 2013-01-06 | ||
| + | </ | ||
| + | |||
| + | Упорядочить по значению элементов столбца (например по столбцу B) | ||
| + | |||
| + | <code python> | ||
| + | print(df.sort_values(by=' | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | | ||
| + | 2013-01-03 -0.861849 -2.104569 -0.494929 | ||
| + | 2013-01-04 | ||
| + | 2013-01-01 | ||
| + | 2013-01-02 | ||
| + | 2013-01-06 -0.673690 | ||
| + | 2013-01-05 -0.424972 | ||
| + | </ | ||
| + | |||
| + | |||
| + | Строки можно перебрать и с помощью цикла for, для этого нужно воспользоваться функцией iterrows | ||
| + | |||
| + | <code python> | ||
| + | for index,row in df.iterrows(): | ||
| + | print(row[' | ||
| + | </ | ||
| + | |||
| + | ======= Выборки ======= | ||
| + | |||
| + | ===== Получение ===== | ||
| + | |||
| + | Выбор данных из колонок и стобцов очень похож на работу с списками. Одна колонка | ||
| + | |||
| + | <code python> | ||
| + | print(df[' | ||
| + | </ | ||
| + | |||
| + | Диапазон строк по номеру | ||
| + | |||
| + | <code python> | ||
| + | print(df[0: | ||
| + | </ | ||
| + | Диапазон строк по значению индекса | ||
| + | <code python> | ||
| + | |||
| + | print(df[' | ||
| + | </ | ||
| + | |||
| + | ===== Выборка по метке ===== | ||
| + | Для сечения таблицы по метке используется функция loc, например, | ||
| + | <code python> | ||
| + | print(df.loc[dates[0]]) | ||
| + | </ | ||
| + | Никто не мешает нам выбрать одновременно по двум осям - строкам и столбцам. Выберем подтаблицу, | ||
| + | |||
| + | |||
| + | <code python> | ||
| + | print(df.loc[:, | ||
| + | </ | ||
| + | |||
| + | Или только три строки | ||
| + | |||
| + | <code python> | ||
| + | print(df.loc[' | ||
| + | </ | ||
| + | |||
| + | Одно значение из таблицы получим с помощью | ||
| + | |||
| + | <code python> | ||
| + | print(df.loc[dates[0],' | ||
| + | </ | ||
| + | |||
| + | ===== Выборка по позиции ===== | ||
| + | |||
| + | Для получения по позиции или по номеру используется функция iloc. Возьмем третью строку | ||
| + | |||
| + | <code python> | ||
| + | print(df.iloc[3]) | ||
| + | </ | ||
| + | |||
| + | Или строки с третьей по четвертую и столбцы с нулевого по первый (внимание, | ||
| + | |||
| + | <code python> | ||
| + | print(df.iloc[3: | ||
| + | </ | ||
| + | |||
| + | Вместо диапазонов можно указать конкретные строки или столбцы, | ||
| + | |||
| + | <code python> | ||
| + | print(df.iloc[df.iloc[[1, | ||
| + | </ | ||
| + | |||
| + | Или же, например, | ||
| + | <code python> | ||
| + | print(df.iloc[df.iloc[1: | ||
| + | </ | ||
| + | Аналогично со столбцами | ||
| + | <code python> | ||
| + | print(df.iloc[:, | ||
| + | </ | ||
| + | |||
| + | ===== Фильтрация с помощью логических выражений ===== | ||
| + | |||
| + | Выберем из таблица все строки, | ||
| + | |||
| + | <code python> | ||
| + | print(df[df.A > 0]) | ||
| + | </ | ||
| + | |||
| + | Или только положительные данные во всей таблице | ||
| + | |||
| + | <code python> | ||
| + | print(df[df > 0]) | ||
| + | </ | ||
| + | |||
| + | < | ||
| + | | ||
| + | 2013-01-01 | ||
| + | 2013-01-02 | ||
| + | 2013-01-03 | ||
| + | 2013-01-04 | ||
| + | 2013-01-05 | ||
| + | 2013-01-06 | ||
| + | </ | ||
| + | |||
| + | Обратите внимание, | ||
| + | |||
| + | Функция isin сверяет значения из строки или столбца со списком, | ||
| + | |||
| + | <code python> | ||
| + | df2 = df.copy() # функция copy копирует данные из одного датафрейма в другой | ||
| + | df2[' | ||
| + | |||
| + | print(df2) | ||
| + | |||
| + | print(df2[' | ||
| + | </ | ||
| + | |||
| + | |||
| + | |||
| + | < | ||
| + | | ||
| + | 2013-01-01 | ||
| + | 2013-01-02 | ||
| + | 2013-01-03 -0.861849 -2.104569 -0.494929 | ||
| + | 2013-01-04 | ||
| + | 2013-01-05 -0.424972 | ||
| + | 2013-01-06 -0.673690 | ||
| + | |||
| + | | ||
| + | 2013-01-03 -0.861849 -2.104569 -0.494929 | ||
| + | 2013-01-05 -0.424972 | ||
| + | </ | ||
| + | |||
| + | ====== Ввод/ | ||
| + | |||
| + | Представить столбец в виде списка | ||
| + | |||
| + | <code python> | ||
| + | l = df[' | ||
| + | </ | ||
| + | ===== CSV ===== | ||
| + | Чтение CSV файла делается в одну строку | ||
| + | <code python> | ||
| + | pd.read_csv(' | ||
| + | </ | ||
| + | |||
| + | |||
| + | ====== Задача 4 ====== | ||
| + | |||
| + | Найти всех легендарных покемонов. | ||
| + | |||
| + | ====== Задача 5 ====== | ||
| + | |||
| + | Найти всех производителей шоколада, | ||
| + | |||
| + | < | ||
| + | Страна1 | ||
| + | | ||
| + | | ||
| + | |||
| + | Страна2 | ||
| + | | ||
| + | | ||
| + | | ||
| </ | </ | ||