Практическое руководство по эффективному анализу данных
Pandas - популярная библиотека анализа и обработки данных для Python. Основная структура данных Pandas - это фрейм данных, который хранит данные в табличной форме с помеченными строками и столбцами.
Распространенной операцией при анализе данных является фильтрация значений на основе условия или нескольких условий. Pandas предоставляет множество способов фильтрации точек данных (то есть строк). В этой статье мы рассмотрим 8 различных способов фильтрации фрейма данных.
Начнем с импорта библиотек.
import numpy as np import pandas as pd
Давайте создадим образец фрейма данных для примеров.
df = pd.DataFrame({ name':['Jane','John','Ashley','Mike','Emily','Jack','Catlin'], 'ctg':['A','A','C','B','B','C','B'], 'val':np.random.random(7).round(2), 'val2':np.random.randint(1,10, size=7) })
1. Логические операторы
Мы можем использовать логические операторы для значений столбцов для фильтрации строк.
df[df.val > 0.5] name ctg val val2 ------------------------------------------- 1 John A 0.67 1 3 Mike B 0.91 5 4 Emily B 0.99 8 6 Catlin B 1.00 3
Мы выбрали строки, в которых значение в столбце «val» больше 0,5.
Логические операторы также работают со строками.
df[df.name > 'Jane'] name ctg val val2 ------------------------------------------- 1 John A 0.67 1 3 Mike B 0.91 5
Выбираются только имена, которые идут после слова «Джейн» в алфавитном порядке.
2. Несколько логических операторов
Pandas позволяет комбинировать несколько логических операторов. Например, мы можем применить условия к столбцам val и val2, как показано ниже.
df[(df.val > 0.5) & (df.val2 == 1)] name ctg val val2 ------------------------------------------- 1 John A 0.67 1
Знаки «&» обозначают «и», «|» означает «или».
df[(df.val < 0.5) | (df.val2 == 7)] name ctg val val2 ------------------------------------------- 0 Jane A 0.43 1 2 Ashley C 0.40 7 5 Jack C 0.02 7
3. Исин
Метод isin - это еще один способ применения множественных условий для фильтрации. Например, мы можем фильтровать имена, которые существуют в данном списке.
names = ['John','Catlin','Mike'] df[df.name.isin(names)] name ctg val val2 ------------------------------------------- 1 John A 0.67 1 3 Mike B 0.91 5 6 Catlin B 1.00 3
4. Аксессуар Str.
Pandas также является высокоэффективной библиотекой текстовых данных. Функции и методы метода доступа str предоставляют гибкие способы фильтрации строк на основе строк.
Например, мы можем выбрать имена, начинающиеся с буквы «J».
df[df.name.str.startswith('J')] name ctg val val2 ------------------------------------------- 0 Jane A 0.43 1 1 John A 0.67 1 5 Jack C 0.02 7
Функция contains под аксессором str возвращает значения, содержащие заданный набор символов.
df[df.name.str.contains('y')] name ctg val val2 ------------------------------------------- 2 Ashley C 0.40 7 4 Emily B 0.99 8
Мы можем передать более длинный набор символов в функцию contains в зависимости от строк в данных.
5. Тильда (~)
Оператор тильды используется для логики «не» при фильтрации. Если мы добавим оператор тильды перед выражением фильтра, будут возвращены строки, не соответствующие условию.
df[~df.name.str.startswith('J')] name ctg val val2 ------------------------------------------- 2 Ashley C 0.40 7 3 Mike B 0.91 5 4 Emily B 0.99 8 6 Catlin B 1.00 3
Получаются имена, не начинающиеся с буквы «J».
6. Запрос
Функция запроса предлагает немного больше гибкости при написании условий фильтрации. Мы можем передать условия в виде строки.
Например, следующий код возвращает строки, которые принадлежат категории B и имеют значение выше 0,5 в столбце val.
df.query('ctg == "B" and val > 0.5') name ctg val val2 ------------------------------------------- 3 Mike B 0.91 5 4 Emily B 0.99 8 6 Catlin B 1.00 3
7. Наибольший или наименьший
В некоторых случаях у нас нет определенного диапазона для фильтрации, а нужны только самые большие или самые маленькие значения. Функции nlargest и nsmallest позволяют выбирать строки, которые имеют наибольшее или наименьшее значение в столбце соответственно.
df.nlargest(3, 'val') name ctg val val2 ------------------------------------------- 6 Catlin B 1.00 3 4 Emily B 0.99 8 3 Mike B 0.91 5
Мы указываем количество наибольших или наименьших значений для выбора и имя столбца.
df.nsmallest(2, 'val2') name ctg val val2 ------------------------------------------- 0 Jane A 0.43 1 1 John A 0.67 1
8. Loc и iloc
Методы loc и iloc используются для выбора строк или столбцов на основе индекса или метки.
- loc: выберите строки или столбцы с помощью меток
- iloc: выберите строки или столбцы с помощью индексов
Таким образом, их можно использовать для фильтрации. Однако мы можем выбрать только определенную часть фрейма данных без указания условия.
df.iloc[3:5, :] #rows 3 and 4, all columns name ctg val val2 ------------------------------------------- 3 Mike B 0.91 5 4 Emily B 0.99 8
Если фрейм данных имеет целочисленный индекс, индексы и метки строк совпадают. Таким образом, и loc, и iloc выполнили одно и то же в строках.
df.loc[3:5, :] #rows 3 and 4, all columns name ctg val val2 ------------------------------------------- 3 Mike B 0.91 5 4 Emily B 0.99 8
Давайте обновим индекс фрейма данных, чтобы лучше продемонстрировать разницу между loc и iloc.
df.index = ['a','b','c','d','e','f','g']
Сейчас мы не можем передавать целые числа в метод loc, потому что метки индексов представляют собой буквы.
df.loc['b':'d', :] name ctg val val2 ------------------------------------------- b John A 0.67 1 c Ashley C 0.40 7 d Mike B 0.91 5
Заключение
Мы рассмотрели 8 различных способов фильтрации строк во фрейме данных. Все они полезны и пригодятся в определенных случаях.
Pandas - мощная библиотека для анализа и обработки данных. Он предоставляет множество функций и методов для обработки данных в табличной форме. Как и в случае с любым другим инструментом, лучший способ выучить Pandas - это практиковаться.
Спасибо за чтение. Пожалуйста, дайте мне знать, если у вас есть какие-либо отзывы.