мета-данные страницы
Загрузка не удалась. Возможно, проблемы с правами доступа?
Различия
Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версияПоследняя версияСледующая версия справа и слева | ||
python:week20 [01/10/2018 03:07] – [Что pandas умеет?] ybezrukov | python:week20 [08/10/2018 01:21] – [Фильтрация с помощью логических выражений] ybezrukov | ||
---|---|---|---|
Строка 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 | ||
+ | </ | ||
+ | |||
+ | ====== Ввод/ | ||
+ | ===== CSV ===== | ||
+ | Чтение CSV файла делается в одну строку | ||
+ | <code python> | ||
+ | pd.read_csv(' | ||
+ | </ | ||
+ | |||
+ | |||
+ | ====== Задача 4 ====== | ||
+ | |||
+ | Найти всех легендарных покемонов. | ||
+ | |||
+ | ====== Задача 5 ====== | ||
+ | |||
+ | Найти всех производителей шоколада, | ||
+ | |||
+ | < | ||
+ | Страна1 | ||
+ | | ||
+ | | ||
+ | |||
+ | Страна2 | ||
+ | | ||
+ | | ||
+ | | ||
</ | </ | ||