Практическое руководство по эффективному анализу данных

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 - это практиковаться.

Спасибо за чтение. Пожалуйста, дайте мне знать, если у вас есть какие-либо отзывы.