Как сделать срез датафрейма

Обновлено: 06.07.2024

Пакет pandas в Python 3 используется для управления и анализа данных (в том числе помеченных и реляционных данных).

Разработанный на основе библиотеки numpy, пакет pandas включает в себя метки и описательные индикаторы. Пакет pandas особенно производителен и надёжен при работе с распространенными форматами данных и пропущенными данными.

Пакет pandas предоставляет функции для работы с электронными таблицами; чтобы повысить производительность pandas при работе с данными, используйте Python вместо электронных таблиц.

Данное руководство поможет установить pandas и ознакомит вас с основными структурами данных: Series и DataFrames

Установка pandas

Как и другие пакеты Python, pandas можно установить с помощью менеджера pip.

Разверните среду разработки и установите pandas и зависимости пакета:

pip install pandas numpy python-dateutil pytz

Команда должна вернуть примерно следующее:

Successfully installed pandas-0.19.2

Чтобы установить pandas в Anaconda, запустите команду:

conda install pandas

Теперь вы можете приступать к работе с pandas.

Структура данных Series

В pandas Series – это одномерные массивы, которые могут содержать любой тип данных. Метки осей называют индексом.

Запустите интерпретатор Python в командной строке:

Теперь импортируйте пакеты numpy и pandas в пространство имен:

import numpy as np
import pandas as pd

Общая структура Series имеет такой вид:

s = pd.Series([data], index=[index])

Обратите внимание: эта структура очень похожа на список Python.

Работа без индекса

Введите целочисленные данные, а затем добавьте параметр name для Series; в этот раз попробуем работать с pandas без индексации, потому не используйте параметр index.

s = pd.Series([0, 1, 4, 9, 16, 25], name='Squares')

Теперь вызовите данные:

На экране появится следующий вывод: индекс будет в левом столбце, а значения данных – в правом столбце. Под столбцами вы увидите имя Series и представленный тип данных.

0 0
1 1
2 4
3 9
4 16
5 25
Name: Squares, dtype: int64

Вышеприведённый пример показал, что pandas может выполнять автоматическую индексацию массива.

Индексация в pandas

Кроме того, вы можете сами задавать индексы в Series. Давайте создадим массив, содержащий данные о средней глубине океанов Земли в метрах:

avg_ocean_depth = pd.Series([1205, 3646, 3741, 4080, 3270], index=['Arctic', 'Atlantic', 'Indian', 'Pacific', 'Southern'])

avg_ocean_depth
Arctic 1205
Atlantic 3646
Indian 3741
Pacific 4080
Southern 3270
dtype: int64

Указанные вами индексы находятся слева, а значения – справа.

Индексация и срез Series

Пакет pandas позволяет извлекать значения по номеру индекса:

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

avg_ocean_depth[2:4] Indian 3741
Pacific 4080
dtype: int64

Извлечь данные можно и по значению индекса, например:

Значения индекса можно использовать для создания срезов:

avg_ocean_depth['Indian':'Southern'] Indian 3741
Pacific 4080
Southern 3270
dtype: int64

Обратите внимание: при создании среза по значению индекса оба индекса используются включительно.

Чтобы остановить интерпретатор Python, введите quit().

Использование словарей в Series

Пакет pandas позволяет использовать словари для инициализации Series.

То есть, вместо индексов можно использовать встроенные ключи.

Создайте файл ocean.py и добавьте следующий словарь с функцией отображения:

import numpy as np
import pandas as pd
avg_ocean_depth = pd.Series( 'Arctic': 1205,
'Atlantic': 3646,
'Indian': 3741,
'Pacific': 4080,
'Southern': 3270
>)
print(avg_ocean_depth)

Запустите файл в командной строке:

Arctic 1205
Atlantic 3646
Indian 3741
Pacific 4080
Southern 3270
dtype: int64

Данные Series отображаются в организованном порядке, индексы (представленные ключами) находятся слева, а множество значений – справа.

Как и при работе со словарями Python, вы можете получить доступ к значению, вызвав соответствующий ключ:

.
print(avg_ocean_depth['Indian'])
print(avg_ocean_depth['Atlantic':'Indian'])
Output
3741
Atlantic 3646
Indian 3741
dtype: int64

Однако такие данные Series являются объектами Python, потому функции словарей доступны не будут.

Структура данных DataFrame

DataFrame – это двухмерные структуры помеченных данных, столбцы которых могут содержать разные типы данных.

Данные DataFrame похожи на электронную таблицу или таблицу SQL. В целом DataFrame – самый распространённый объект при работе с pandas.

Чтобы понять, как работает DataFrame, создайте две структуры Series и передайте их DataFrame. Первая структура Series – это avg_ocean_depth (из вышеприведённого примера), а вторая структура будет называться max_ocean_depth и содержать данные о максимальной глубине каждого океана в метрах. Откройте файл ocean.py и добавьте в него:

import numpy as np
import pandas as pd
avg_ocean_depth = pd.Series( 'Arctic': 1205,
'Atlantic': 3646,
'Indian': 3741,
'Pacific': 4080,
'Southern': 3270
>)
max_ocean_depth = pd.Series( 'Arctic': 5567,
'Atlantic': 8486,
'Indian': 7906,
'Pacific': 10803,
'Southern': 7075
>)

Структуры Series готовы. Теперь добавьте в конец файла DataFrame (под max_ocean_depth). В данном примере обе структуры Series имеют одинаковые метки индексов; если бы структуры Series имели разные метки индексов, пропущенные значения были бы помечены как NaN.

.
max_ocean_depth = pd.Series( 'Arctic': 5567,
'Atlantic': 8486,
'Indian': 7906,
'Pacific': 10803,
'Southern': 7075
>)
ocean_depths = pd.DataFrame( 'Avg. Depth (m)': avg_ocean_depth,
'Max. Depth (m)': max_ocean_depth
>)

В массив можно добавить метки столбцов, которые объявлены как ключи переменных Series. Чтобы увидеть DataFrame, отобразите данные:

print(ocean_depths)
Avg. Depth (m) Max. Depth (m)
Arctic 1205 5567
Atlantic 3646 8486
Indian 3741 7906
Pacific 4080 10803
Southern 3270 7075

В результате на экране появится два столбца с соответствующими заголовками, числовые данные справа и метки из словаря (ключи) слева.

Сортировка данных в DataFrame

Вы можете сортировать данные в DataFrame с помощью функции DataFrame.sort_values(by=…).

Для примера используем логический параметр ascending, который может быть истинным или ложным (True или False). Параметр ascending можно передать функции, а descending – нельзя.

.
print(ocean_depths.sort_values('Avg. Depth (m)', ascending=True))
Output
Avg. Depth (m) Max. Depth (m)
Arctic 1205 5567
Southern 3270 7075
Atlantic 3646 8486
Indian 3741 7906
Pacific 4080 10803

Теперь в выводе значения расположены в порядке возрастания.

DataFrame и статистический анализ

Пакет pandas позволяет собирать общие статистические данные с помощью функции DataFrame.describe().

Без дополнительных параметров функция DataFrame.describe() предоставит следующую информацию для числовых типов данных:

Вывод

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

Запросите статистику структуры ocean_depths с помощью функции describe().

На экране появятся данные:

Avg. Depth (m) Max. Depth (m)
count 5.000000 5.000000
mean 3188.400000 7967.400000
std 1145.671113 1928.188347
min 1205.000000 5567.000000
25% 3270.000000 7075.000000
50% 3646.000000 7906.000000
75% 3741.000000 8486.000000
max 4080.000000 10803.000000

Обработка пропущенных значений

Пропущенные значения часто встречаются при работе с данными. Пакет pandas предоставляет множество способов обработки пропущенных данных (данных null), то есть тех данных, которые были пропущены по той или иной причине. В pandas такие данные называются данными NA и отображаются как NaN.

Рассмотрим некоторые функции работы с пропущенными данными (например, сброс и заполнение). Для сброса используется функция DataFrame.dropna(), а для заполнения – DataFrame.fillna().

Создайте файл user_data.py, добавьте в него данные с пропущенными значениями и превратите в DataFrame:

import numpy as np
import pandas as pd
user_data = 'last_name': ['Smith', 'Jones', np.nan, 'Miller'],
'online': [True, np.nan, False, True],
'followers': [987, 432, 321, np.nan]>
df = pd.DataFrame(user_data, columns = ['first_name', 'last_name', 'online', 'followers'])
print(df)

Теперь отобразите данные:

first_name last_name online followers
0 Sam Smith True 987.0
1 Jesse Jones NaN 432.0
2 NaN NaN False 321.0
3 Jamie Miller True NaN

В них присутствует несколько пропущенных значений.

Попробуйте сбросить пропущенные значения. Добавьте в файл опцию:

.
df_drop_missing = df.dropna()
print(df_drop_missing)

Поскольку в файле всего одна строка не содержит пропущенных значений, на экране появится довольно маленький набор данных:

first_name last_name online followers
0 Sam Smith True 987.0

Пропущенные значения можно заполнить любыми значениями, например, вставить 0. Это делается с помощью DataFrame.fillna(0).

Удалите или закомментируйте последнюю строку в файле и добавьте в него такую строку:

.
df_fill = df.fillna(0)
print(df_fill)

Снова запустите программу. На экране появится:

first_name last_name online followers
0 Sam Smith True 987.0
1 Jesse Jones 0 432.0
2 0 0 False 321.0
3 Jamie Miller True 0.0

Теперь на экране отображаются все строки, а пропущенные значения NaN заменены нулем.

Заключение

Данное руководство ознакомило вас с основами pandas в Python 3: теперь вы умеете устанавливать этот пакет, использовать структуры Series и DataFrame, сортировать и анализировать данные.

Pandas – обработка и анализ данных в Python

Статьи

Подробный обзор библиотеки Pandas. Гибкая и мощная библиотека для анализа и обработки данных, разработанная на языке программирования Python.

Введение

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

Series — это структура данных принципиально похожая на список и словарь в Python. Используется в качестве столбцов в таблице.

DataFrame — если говорить простыми словами, то эта структура данных представляет из себя обычную таблицу. Иными словами табличная структура данных. Как и во всех таблицах она состоит из строк и столбцов. Столбцами выступают объекты Series, а строки его элементы.

Установка

Pandas как и все библиотеки в Python устанавливаются стандартным методом через пакетный менеджер pip.

Использование

Чтобы показать библиотеку в работе, нам нужны какие нибудь статистические данные, для примера давайте возьмем данные ВВП 5 разных стран по версии всемирного банка и попробуем сформировать из них таблицу. Передавать данных в DataFrame мы будем используя знакомый синтаксис словаря Python.

Объект DataFrame имеет два индекса по столбцам и строкам. Если индекс по строкам не указан вручную, то pandas задает его автоматически.

Индексы

Назначать индексы объекту DataFrame можно при его создании или в процессе работы с ним.

Вызывая метод DataFrame мы передали ему аргумент index со списком именованных индексов.

Фильтрация данных

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

По столбцу

Обращение к столбцам в pandas реализовано стандартным образом, так как будто вы обращаетесь к ключу словаря, или же к методу объекта. В моем случае обращение как к методу объекта невозможно, я выбрал кириллическое название столбца, а работает только с латиницей 🙂

По строковому индексу

Для обращения к строковым индекса существуют два метода

  • loc — для доступа по именованному индексу
  • iloc — для доступа по числовому индексу

Обращение к именованному индексу RU

Обращение к числовому индексу

По срезами

Объект DataFrame поддерживает использование срезов.

Отобразим все строки начиная с 3.

С использованием условий

Мы так же можем использовать логику в фильтрации данных. Давайте отобразить странны, в которых ВВП на душу населения в 2018 году был больше 100$

Работа с столбцами

Вы можете создавать, удалять и переименовывать ваши столбцы в любой момент времени.

Давайте рассмотрим каждый момент по внимательнее.

Переименование

Для переименования столбца существует метод rename

Давайте переименуем наши столбцы с указанием года.

Метод rename на вход принимает обычный словарь, ключ который является текущем названием столбца, а значение — новым. За один раз мы можем переименовать сколько угодно столбцов, главное не забывайте разделять элементы словаря запятой.

Важно: результат выполнение метода rename возвращает новый измененный объект DataFrame, поэтому переназначь основной экземпляр DataFrame.

Создание

В этой ситуации объект изменяется и переназначать экземпляр нам не нужно.

Удаление

Для удаления столбца существует метод drop, так же необходимо передать в аргумент axis значение index или columns.

Важно: результат выполнение метода drop возвращает новый измененный объект DataFrame, поэтому не забудьте переназначить DataFrame.

Загрузка данных

API загрузки данных имеет поддержку множество структурированных форматов. Для примера возьмем информацию из реестра специалистов в области ветеринарии, занимающихся предпринимательской деятельностью на территории Санкт-Петербурга. На сайте есть ссылочка для скачивания таблиц в формате CSV и MS Excel эти два формата мы и рассмотрим.

Из таблицы CSV

Осуществить загрузку данных в таблицу можно используя метод read_csv

Из таблицы MS Excel

За загрузку данных из excel таблицы отвечает метод read_excel

Установка библиотеки xlrd

Для загрузки данных из таблицы MS Excel необходимо установить дополнительную библиотеку xlrd

Загрузка данных

После установки необходимых зависимостей мы можем приступать к загрузке данных.

Список всех поддерживаемых форматов

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

Тип данныхФормат данныхИспользуемый метод
ТекстовыйCSVread_csv
ТекстовыйFixed-Width Text Fileread_fwf
ТекстовыйJSONread_json
ТекстовыйHTMLread_html
ТекстовыйБуфер обменаread_clipboard
БинарныйMS Excelread_excel
БинарныйOpenDocumentread_excel
БинарныйHDF5 Formatread_hdf
БинарныйFeather Formatread_feather
БинарныйParquet Formatread_parquet
БинарныйORC Formatread_orc
БинарныйMsgpackread_msgpack
БинарныйStataread_stata
БинарныйSASread_sas
БинарныйSPSSread_spss
БинарныйPython Pickle Formatread_pickle
SQLSQLread_sql
SQLGoogle BigQueryread_gbq

Сохранение данных

Так же как и в импорте API поддерживает множество форматов для экспорта данных. Воспользуемся данными о ВВП для демонстрации работы.

В таблицу CSV

За запись данных в таблицу CSV отвечает метод to_csv

так выглядят наши экспортированные данные

В таблицу MS Excel

За запись данных в таблицу MS Excel отвечает метод to_excel

Установка библиотеки openpyxl

Для записи в таблицу нам понадобиться установить библиотеку openpyxl

Сохранение данных

Запускаем наш скрипт

На выходе получаем такую таблицу

Подробный обзор библиотеки Pandas. Гибкая и мощная библиотека для анализа и обработки данных, разработанная на языке программирования Python.

Список всех поддерживаемых форматов

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

Тип данныхФормат данныхИспользуемый метод
ТекстовыйCSVto_csv
ТекстовыйJSONto_json
ТекстовыйHTMLto_html
ТекстовыйБуфер обменаto_clipboard
БинарныйMS Excelto_excel
БинарныйHDF5 Formatto_hdf
БинарныйFeather Formatto_feather
БинарныйParquet Formatto_parquet
БинарныйMsgpackto_msgpack
БинарныйStatato_stata
БинарныйPython Pickle Formatto_pickle
SQLSQLto_sql
SQLGoogle BigQueryto_gbq

Визуализация данных

Визуализация это большая часть работы в анализе и обработке данных. Не будем сильно углубляться и рассмотрим простой пример визуализации наших данных.

Установка библиотеки matplotlib

Для рисования графиков нам понадобится эта библиотека

Создание графиков

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

После выполнения программы мы увидим вот такой график

Подробный обзор библиотеки Pandas. Гибкая и мощная библиотека для анализа и обработки данных, разработанная на языке программирования Python.

Можно повторить тоже самое но только для 2018 года

Подробный обзор библиотеки Pandas. Гибкая и мощная библиотека для анализа и обработки данных, разработанная на языке программирования Python.

Объединение данных на одном графике

У нас есть отдельный график для 2017 и 2018 года, но как их объединить в одной диаграмме? Очень просто, нужно использовать метод pivot из библиотеки pandas.

Подробный обзор библиотеки Pandas. Гибкая и мощная библиотека для анализа и обработки данных, разработанная на языке программирования Python.

Заключение

На это обзор библиотеки pandas подошел к концу, если у вас возникли вопросы, не стесняйтесь задавать их в комментариях.


Pandas - чрезвычайно популярный фреймворк для обработки данных в Python. Во многих случаях вам может потребоваться перебрать данные - либо для их распечатки, либо для выполнения с ними некоторых операций.

В этом руководстве мы рассмотрим, как перебирать строки в Pandas DataFrame .

Давайте рассмотрим три основных способа перебора DataFrame:

Итерация DataFrames с помощью items()

Давайте настроим некоторые данные о вымышленных людях в DataFrame :

Обратите внимание, что мы используем id как наш индекс DataFrame . Давайте посмотрим, как выглядит этот DataFrame :

Теперь, чтобы перебрать этот DataFrame , мы воспользуемся функцией items() :

Он возвращает генератор:

Мы можем использовать это для генерации пар col_name и data . Эти пары будут содержать имя столбца и каждую строку данных для этого столбца. Давайте пройдемся по именам столбцов и их данным:

Мы успешно перебрали все строки в каждом столбце. Обратите внимание, что столбец индекса остается неизменным на протяжении итерации, поскольку это связанный индекс для значений. Если вы не определяете индекс, Pandas соответствующим образом пронумеровывает столбец индекса.

Мы также можем напечатать конкретную строку, передав номер индекса в data , как мы это делаем со списками Python:

Обратите внимание, что индекс списка начинается с нуля, поэтому data[1] будет относиться ко второй строке. Вы увидите этот вывод:

Мы также можем передать значение индекса в data .

Результат будет таким же, как и раньше:

Итерация DataFrames с помощью iterrows()

В то время как df.items() перебирает строки по столбцам, выполняя цикл для каждого столбца, мы можем использовать iterrows() , чтобы получить все строковые данные индекса.

Попробуем перебрать строки с помощью iterrows() :

В цикле for i представляет столбец индекса (наш DataFrame имеет индексы от id001 до id006 ) и row содержит данные для этого индекса во всех столбцах. Наш результат будет выглядеть так:

Точно так же мы можем перебирать строки в определенном столбце. Просто передав номер индекса или имя столбца в row . Например, мы можем выборочно распечатать первый столбец строки следующим образом:

Оба они производят такой вывод:

Итерация DataFrames с помощью itertuples()

Функция itertuples() также возвращает генератор, который генерирует значение строк в кортежах. Давайте попробуем это:

Вы увидите это в своей оболочке Python:

У метода itertuples() два аргумента: index и name .

Мы можем не отображать столбец индекса, установив для параметра index значение False :

У наших кортежей больше не будет отображаться индекс:

Как вы уже заметили, этот генератор выдает именованные кортежи с именем по умолчанию Pandas . Мы можем изменить это, передав People аргумент параметру name . Вы можете выбрать любое имя, которое вам нравится, но всегда лучше выбирать имена, соответствующие вашим данным:

Теперь наш вывод будет:

Производительность итерации с помощью Pandas

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

Для небольших наборов данных вы можете использовать этот метод to_string() для отображения всех данных. Для больших наборов данных, содержащих много столбцов и строк, вы можете использовать методы head(n) или tail(n) для печати первых n строк вашего DataFrame (значение по умолчанию n - 5).

Сравнение скорости

Чтобы измерить скорость каждого конкретного метода, мы обернули их в функции, которые будут выполнять их 1000 раз и возвращать среднее время выполнения.

Чтобы проверить эти методы, мы будем использовать обе функции print() и list.append() , чтобы обеспечить более точные данные сравнения и для покрытия общих случаев использования. Чтобы определить справедливого победителя, мы будем перебирать DataFrame и использовать только одно значение для печати или добавления в цикл.

Вот как выглядят возвращаемые значения для каждого метода:

Например, при items() :

iterrows() предоставит все данные столбца для конкретной строки:

И, наконец, одна строка для элемента itertuples() будет выглядеть так:

Вот средние результаты в секундах:


Печать значений потребует больше времени и ресурсов, чем добавление в целом, и наши примеры не являются исключением. Хотя метод itertuples() работает лучше в сочетании с print() , метод items() значительно превосходит другие при использовании append() и iterrows() остается последним для каждого сравнения.

Обратите внимание, что результаты этих тестов сильно зависят от других факторов, таких как ОС, среда, вычислительные ресурсы и т.д. Размер ваших данных также будет влиять на ваши результаты.

Вывод

Мы научились перебирать в DataFrame с тремя различными методами Pandas - items() , iterrows() , itertuples() . В зависимости от ваших данных и предпочтений вы можете использовать один из них в своих проектах.

Рассмотрим несколько примеров, чтобы понять, чем отличается .iloc от .loc.

Выберем две строки и два столбца:

Осуществим выборку строк и столбцов с помощью среза:

Выберем 1 значение из столбца и указанной колонки:

Результат:

Резюме по .loc и .iloc

Доступ к строкам и колонкам по индексу возможен несколькими способами:

  • .loc — используется для доступа по строковой метке — т.е. фактически по значению индекса и по названию столбца
  • .iloc — используется для доступа по числовому значению (начиная от 0) — т.е. по номеру строки и номеру столбца




Как выбрать строки из Pandas DataFrame по условию

Собираем тестовый набор данных для иллюстрации работы выборки по условию

Color Shape Price
Green Rectangle 10
Green Rectangle 15
Green Square 5
Blue Rectangle 5
Blue Square 10
Red Square 15
Red Square 15
Red Rectangle 5

Пишем скрипт:

Синтаксис выборки строк из Pandas DataFrame по условию

Вы можете использовать следующую логику для выбора строк в Pandas DataFrame по условию:

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

  • Color — это название столбца
  • Green — это условие (значение колонки)

А вот полный код Python для нашего примера:

Результат:

Выберем строки, где цена равна или больше 10

Чтобы получить все строки, где цена равна или больше 10, Вам нужно применить следующее условие:

Полный код Python:

Результат:

Выберем строки, в которых цвет зеленый, а форма — прямоугольник

Теперь цель состоит в том, чтобы выбрать строки на основе двух условий:

  • Color зеленый; а также
  • Shape = прямоугольник

Мы будем использовать символ & для применения нескольких условий. В нашем примере код будет выглядеть так:

Полный код примера Python для выборки Pandas DataFrame:

Результат:

Выберем строки, где цвет зеленый ИЛИ форма прямоугольная

Для достижения этой цели будем использовать символ | следующим образом:

Полный код Python 3:

Выберем строки, где цена не равна 15

Мы будем использовать комбинацию символов !=, чтобы выбрать строки, цена которых не равна 15:

Полный код Pandas DF на питоне:

Результат работы скрипта Python:

ст. преп. кафедры ЦЭиИТ. Автор более 130 научных и учебно-методических работ. Лауреат ВДНХ (серебряная медаль). Посмотреть больше записей

Читайте также: