• Автор записи:
  • Рубрика записи:Pandas
  • Время чтения:11 минут чтения
  • Комментарии к записи:0 комментариев

Для фильтрации DataFrame в Python Pandas существует несколько встроенных методов, таких как filter(), query(), isin(), isnull(), notnull() и т. д., а также несколько атрибутов, таких как loc[], iloc[], iat[ ], at[] и т. д. Используя эти предопределенные методы и атрибуты, вы можете выполнить фильтрацию DataFrame и получить желаемый результат в соответствии с вашими условиями.

Давайте шаг за шагом рассмотрим все методы и атрибуты для фильтрации Pandas DataFrame в Python.

Содержание

1. С использованием нарезки

Мы можем использовать срезы для фильтрации данных по индексу. Мы должны предоставить диапазон срезов с начальным индексом и конечным индексом. Он вернет строки с заданным диапазоном индексов.

Синтаксис:

df[ start_index : endindex ]

Давайте посмотрим реализацию кода с использованием нарезки.

Код:

import pandas as pd 

Employee_data = pd.DataFrame({
    'name':['Oliver','Sophie','William','Henry','Amelia','Grace','George'],
    'age':[23,45,34,23,26,28,39],
    'state': ['California','Texas','New York','Florida','Georgia','Michigan','Florida']
})
filtered_data = Employee_data[2:5]
print(filtered_data)

Выход:

      name  age     state
2  William   34  New York
3    Henry   23   Florida
4   Amelia   26   Georgia

Снимок экрана: пример нарезки с вводом и выводом.

1. С использованием нарезки

Давайте посмотрим, что произойдет, если мы не зададим значение в start_index или end_index, на другом примере.

Код:

import pandas as pd 

Employee_data = pd.DataFrame({
    'name':['Oliver','Sophie','William','Henry','Amelia','Grace','George'],
    'age':[23,45,34,23,26,28,39],
    'state': ['California','Texas','New York','Florida','Georgia','Michigan','Florida']
})
filtered_data = Employee_data[2:]
print(filtered_data)

Выход:

      name  age     state
2  William   34  New York
3    Henry   23   Florida
4   Amelia   26   Georgia
5    Grace   28  Michigan
6   George   39   Florida

Примечание. Если мы не укажем start_index, в качестве начального индекса по умолчанию будет принят 0; если мы не укажем конечный индекс, он будет идти до конца последовательности.

Без указания значения диапазона

2. С помощью выбора столбца или фильтрации столбца

Мы можем использовать метод Column Selection для фильтрации DataFrame Python Pandas, указав определенное имя столбца на основе условий, примененных к одному или нескольким столбцам.

Синтаксис:

df[['column_name','column_name']]

Код:

import pandas as pd 

Employee_data = pd.DataFrame({
    'name':['Oliver','Sophie','William','Henry','Amelia','Grace','George'],
    'age':[23,45,34,23,26,28,39],
    'state': ['California','Texas','New York','Florida','Georgia','Michigan','Florida'],
    'salary': [5000,9000,8500,15000,21000,4000,7500]
})
filtered_data = Employee_data[['name', 'salary']]
print(filtered_data)

Выход:

      name  salary
0   Oliver    5000
1   Sophie    9000
2  William    8500
3    Henry   15000
4   Amelia   21000
5    Grace    4000
6   George    7500

Снимок экрана:

2. С помощью выбора столбца или фильтрации столбца

3. С использованием метода filter()

Мы можем фильтровать DataFrame, используя встроенный метод filter(). Использование этого метода — это гибкий способ фильтрации данных из Pandas на основе различных условий. Вот практический пример использования метода filter().

Синтаксис:

df.filter(["column_name",  "column_name" ,...])

Реализация метода filter() с параметром items.

Код:

import pandas as pd 

Customer_data = {'Name' : ['John', 'Frankline', 'James'] , 
        'Age': [20, 26, 63],
        'City' : ["London", 'Bristol' ,'Cardiff']}

Customer_df = pd.DataFrame(Customer_data)
filtered_Customer_Data = Customer_df.filter(items=["Age","City"])
print(filtered_Customer_Data)

Выход:

   Age     City
0   20   London
1   26  Bristol
2   63  Cardiff

Скриншот примера с параметром items

С использованием метода filter() в Python

4. С использованием атрибута iloc[]

Чтобы фильтровать DataFrame в Pandas, мы можем использовать iloc(индексирование на основе целочисленного местоположения). Он помогает фильтровать и принимает целочисленные (индексные) значения только в качестве параметра. Он также принимает диапазон в качестве параметра.

Синтаксис:

i) df.iloc[index_value]
ii) df.iloc[start_index : end_index]

Код:

import pandas as pd 

Employee_data = pd.DataFrame({
    'name':['Oliver','Sophie','William','Henry','Amelia','Grace','George'],
    'age':[23,45,34,23,26,28,39],
    'state': ['California','Texas','New York','Florida','Georgia','Michigan','Florida'],
    'salary': [5000,9000,8500,15000,21000,4000,7500]
})
filtered_data = Employee_data.iloc[3]
print(filtered_data)

Выход:

name        Henry
age            23
state     Florida
salary      15000
Name: 3, dtype: object

Снимок экрана: пример реализации iloc[] с одним значением

Фильтрация DataFrame с использованием атрибута iloc в pandas

Давайте посмотрим еще один пример iloc, где мы зададим диапазон внутри iloc[]

Код:

import pandas as pd 

Employee_data = pd.DataFrame({
    'name':['Oliver','Sophie','William','Henry','Amelia','Grace','George'],
    'age':[23,45,34,23,26,28,39],
    'state': ['California','Texas','New York','Florida','Georgia','Michigan','Florida'],
    'salary': [5000,9000,8500,15000,21000,4000,7500]
})
filtered_data = Employee_data.iloc[2:6]
print(filtered_data)

Выход:

      name  age     state  salary
2  William   34  New York    8500
3    Henry   23   Florida   15000
4   Amelia   26   Georgia   21000
5    Grace   28  Michigan    4000

Изображение фильтра данных DataFrame с использованием диапазона внутри iloc[]

4. С использованием атрибута iloc[] 

5. Используя атрибут loc[]

Мы можем использовать loc(location) для фильтрации DataFrame в Pandas, когда индекс задается вручную. Атрибут loc принимает как числовые значения, так и символы.

Здесь вы увидите, как устанавливать значения индекса вручную и как использовать функцию loc для фильтрации DataFrame в Pandas.

Синтаксис:

i) df.loc['index_name'] -> To access the data of single Row
ii) df.loc[['index_name', 'index_name']] -> To access the data of Multiple rows 
iii) df.loc['index' : 'index'] -> You can also give range by giving index_name in loc.

Код:

import pandas as pd

Book_Data = {
    'Title': ['The Great Gatsby', 'To Kill a Mockingbird', '1984'],
    'Author': ['Scott Fitzgerald', 'Harper Lee', 'George Orwell'],
    'Genre': ['Fiction', 'Fiction', 'Dystopian Fiction'],
    'Publication_Year': [1925, 1960, 1949],
    'Pages': [180, 281, 328]
}
df_books = pd.DataFrame(Book_Data, index = ['A','B','C'])
filtered_data = df_books.loc['B']
print(filtered_data)

Выход:

Title               To Kill a Mockingbird
Author                         Harper Lee
Genre                             Fiction
Publication_Year                     1960
Pages                                 281
Name: B, dtype: object

5. Используя атрибут loc[]

Давайте посмотрим еще один пример добавления нескольких индексов с помощью loc.

Код:

import pandas as pd

Book_Data = {
    'Title': ['The Great Gatsby', 'To Kill a Mockingbird', '1984'],
    'Author': ['Scott Fitzgerald', 'Harper Lee', 'George Orwell'],
    'Genre': ['Fiction', 'Fiction', 'Dystopian Fiction'],
    'Publication_Year': [1925, 1960, 1949],
    'Pages': [180, 281, 328]
}
df_books = pd.DataFrame(Book_Data, index = ['A','B','C'])
filtered_data = df_books.loc[['A','C']]
print(filtered_data)

Выход

              Title            Author              Genre  Publication_Year  Pages
A  The Great Gatsby  Scott Fitzgerald            Fiction              1925    180
C              1984     George Orwell  Dystopian Fiction              1949    328

Сиспользованием нескольких столбцов в Python Pandas

6. С использованием query()

Мы можем использовать метод query() для фильтрации строк DataFrame Python Pandas на основе заданного условия.

Вот пример метода query() для фильтрации DataFrame и того, как задавать условия внутри query() в качестве параметра.

Синтаксис:

1) df.query("expression") 
2) df.query("expression1 and expression2 .....") ->(For multiple conditions you can use and,          
                                                                                     or operator)

Код:

import pandas as pd 

Temprature = pd.DataFrame.from_dict({
    "city": ["New York","Los Angeles","Chicago","Phoenix","Dallas","San Francisco"],
    "celsius": [21,28,16,32,38,20],
    'fahrenheit': [25.6, 82.4, 60.8, 89.6, 100.4, 68.0]
})
check_temperature = 20
filtered_data =Temprature.query('celsius >= @check_temperature')
print(filtered_data)

Выход:

            city  celsius  fahrenheit
0       New York       21        25.6
1    Los Angeles       28        82.4
3        Phoenix       32        89.6
4         Dallas       38       100.4
5  San Francisco       20        68.0

Примечание. Если вы хотите получить доступ к переменной внутри метода query(), вы должны использовать «@var_name», иначе он будет искать имя_столбца.

Снимок экрана:

6. С использованием query()

Множественные условия внутри метода запроса. Мы также можем задать несколько условий внутри метода запроса, используя оператор и/или. Вы можете использовать & и | операторы, это считается операторами and или or.

Код:

import pandas as pd 

Temprature = pd.DataFrame.from_dict({
    "city": ["New York","Los Angeles","Chicago","Phoenix","Dallas","San Francisco"],
    "celsius": [21,28,16,32,38,20],
    'fahrenheit': [25.6, 82.4, 60.8, 89.6, 100.4, 68.0]
})
check_temperature = 20
filtered_data =Temprature.query('celsius >= @check_temperature and fahrenheit <= 80')
print(filtered_data)

Выход:

            city  celsius  fahrenheit
0       New York       21        25.6
5  San Francisco       20        68.0

Снимок экрана: пример нескольких условий в методе query().

пример нескольких условий в методе query()

7. С использованием реляционных условий

Мы также можем фильтровать DataFrame без использования какого-либо встроенного метода или атрибута, что является наиболее распространенным способом достижения желаемого результата.

Для этого мы можем использовать реляционные условия для фильтрации DataFrame в Pandas. Мы можем использовать все эти операторы(, ==, =) для фильтрации DataFrame на практическом примере.

Код:

import pandas as pd

Consumer_data = [
    ['John', 'Doe', 30, 'male'],
    ['Jane', 'Smith', 25, 'female'],
    ['Peter', 'Jones', 40, 'male'],
    ['Susan', 'Williams', 55, 'female']
]
Customer_Dataframe = pd.DataFrame(Consumer_data, columns=['name', 'last_name', 'age','gender'])
filter_data = Customer_Dataframe[Customer_Dataframe['age']>32]
print(filter_data)

Выход:

    name last_name  age  gender
2  Peter     Jones   40    male
3  Susan  Williams   55  female

Снимок экрана: использование реляционного условия для фильтрации DataFrame.

7. С использованием реляционных условий

Код:

import pandas as pd

Consumer_data = [
    ['John', 'Doe', 30, 'male'],
    ['Jane', 'Smith', 25, 'female'],
    ['Peter', 'Jones', 40, 'male'],
    ['Susan', 'Williams', 55, 'female']
]
Customer_Dataframe = pd.DataFrame(Consumer_data, columns=['name', 'last_name', 'age','gender'])
filter_data = Customer_Dataframe[(Customer_Dataframe['age']>32) &(Customer_Dataframe['gender'] == 'female')]
print(filter_data)

Выход

    name last_name  age  gender
3  Susan  Williams   55  female

Снимок экрана: добавление нескольких условий в реляционные условия.

добавление нескольких условий в реляционные условия

8. Используя атрибуты iat[] и at[]

Чтобы фильтровать DataFrame, вы можете использовать атрибуты at[] и iat[], которые используются для доступа к отдельным значениям из DataFrame Pandas с помощью адреса строки и столбца.

атрибут at[] используется для фильтрации DataFrame по метке (имя индекса задается вручную).
атрибут iat[] используется для фильтрации DataFrame по целочисленной позиции (index_value).

Синтаксис:

1) df.at['label_name' , 'column_name]
2) df.iat['row_index_value', 'column_name']

Реализация метода at[] в Pandas.

import pandas as pd

food_menu = {
    "pizza_type": ['Margerita', "Onion", "Paneer" , "Mashroom"],
    "price": [120, 180 , 150, 220],
    "is_available": [True, False, False, True]
}
food_menu_df = pd.DataFrame(food_menu,index = ['A', 'B', 'C','D'])
filtered_menu = food_menu_df.at['D','pizza_type']
print(filtered_menu)

Выход:

Mashroom

Скриншот примера at[]:

8. Используя атрибуты iat[] и at[] 

Реализация примера с использованием метода iat[].

import pandas as pd

food_menu = {
    "pizza_type": ['Margerita', "Onion", "Paneer" , "Mashroom"],
    "price": [120, 180 , 150, 220],
    "is_available": [True, False, False, True]
}
food_menu_df = pd.DataFrame(food_menu,index = ['A', 'B', 'C','D'])
filtered_menu = food_menu_df.iat[2,0]
print(filtered_menu)

Выход:

Paneer

Скриншот примера iat[]:

Фильтрация DataFrame в Python Pandas с использованием метода iat[]

9. С использованием метода isin()

В Python библиотека Pandas имеет один мощный встроенный метод isin().

Он используется для фильтрации строк Dataframe на основе заданного условия. Вы можете напрямую указать значение внутри функции isin() в качестве параметра, и он будет фильтровать DataFrame на основе заданного значения.

Синтаксис:

df['columm_name'].isin(['value'])

Код:

import pandas as pd

Consumer_data = [
    ['John', 'California', 30, 'male',True],
    ['Jane', 'Texas', 25, 'female',False],
    ['Peter', 'New York', 40, 'male',True],
    ['Susan', 'Florida', 52, 'female',False],
    ['Oliver', 'Illinois', 54, 'female',True],
    ['Sophie', 'Pennsylvania', 36, 'female',False],
    ['William', 'Ohio', 48, 'male',True],
    ['Henry', 'Georgia', 42, 'male',False],
    ['Amelia', 'North Carolina', 55, 'female',True],
    ['George', 'Michigan', 34, 'male',False],
    ['Grace', 'California', 37, 'female',True],
]
Customer_Dataframe = pd.DataFrame(Consumer_data, columns=['name', 'state', 'age','gender','is_active'])
filtered_data = Customer_Dataframe[Customer_Dataframe['gender'].isin(['male'])]
print(filtered_data)

Выход:

      name       state  age gender  is_active
0     John  California   30   male       True
2    Peter    New York   40   male       True
6  William        Ohio   48   male       True
7    Henry     Georgia   42   male      False
9   George    Michigan   34   male      False

Изображение реализации фильтрации DataFrame с использованием метода isin().

9. С использованием метода isin() 

Мы также можем фильтровать данные, используя несколько условий в функции isin().

Код:

import pandas as pd

Consumer_data = [
    ['John', 'California', 30, 'male',True],
    ['Jane', 'Texas', 25, 'female',False],
    ['Peter', 'New York', 40, 'male',True],
    ['Susan', 'Florida', 52, 'female',False],
    ['Oliver', 'Illinois', 54, 'female',True],
    ['Sophie', 'Pennsylvania', 36, 'female',False],
    ['William', 'Ohio', 48, 'male',True],
    ['Henry', 'Georgia', 42, 'male',False],
    ['Amelia', 'North Carolina', 55, 'female',True],
    ['George', 'Michigan', 34, 'male',False],
    ['Grace', 'California', 37, 'female',True],
]
Customer_Dataframe = pd.DataFrame(Consumer_data, columns=['name', 'state', 'age','gender','is_active'])
selected_gender = ["male"]
check_availability = [True]
filter_data = Customer_Dataframe[(Customer_Dataframe['gender'].isin(selected_gender)) &(Customer_Dataframe['is_active'].isin(check_availability))]
print(filter_data)

Выход:

      name       state  age gender  is_active
0     John  California   30   male       True
2    Peter    New York   40   male       True
6  William        Ohio   48   male       True

Снимок экрана: функция isin() использует несколько условий для фильтрации DataFrame в Python Pandas.

Функция isin()

10. Как использовать регулярное выражение

Чтобы фильтровать DataFrame в Pandas, мы можем использовать регулярное выражение, которое представляет собой последовательность символов и полезно для обнаружения присутствия и отсутствия строки путем сопоставления с конкретным заданным шаблоном.

Давайте разберемся, как мы можем использовать этот мощный метод для фильтрации DataFrame Python Pandas на основе заданного шаблона.

Синтаксис:

df[df['column_name'].str.contains('pattern')] -> contains() method will check whole string        
                                                                                  and return True if given pattern match the   
                                                                                  string.

Практический пример использования метода contains() библиотеки Python.

Код:

import pandas as pd

data = {'name': ['John', 'George', 'Derik', 'Grace', 'Victor'],
        'age': [24, 32, 23, 47, 25],
        'country': ['Brazil', 'Mexico', 'Cambodia', 'Bolivia', 'India']
        }
df = pd.DataFrame(data)
df_filtered = df[df['name'].str.contains('e')]
print(df_filtered)

Выход:

     name  age   country
1  George   32    Mexico
2   Derik   23  Cambodia
3   Grace   47   Bolivia

Снимок экрана: пример регулярного выражения с использованием функции contains().

10. Как использовать регулярное выражение 

11. На основе значений null и notnull

Null — это не что иное, как пустое поле, не содержащее значения. Если вам нужно отфильтровать DataFrame на основе значений null и notnull, в библиотеке Pandas есть встроенные методы, называемые isnull() и notnull().

  • isnull() используется для обнаружения отсутствующих или пустых значений в DataFrame.
  • notnull() проверит, что все поля не являются нулевыми.

Давайте разберемся на практическом примере с использованием метода isnull().

import pandas as pd

Consumer_data = [
    ['John', 'California', 30, 'male',True],
    ['Jane', 'Texas', 25, 'female',False],
    ['Peter', None, 40, 'male',True],
    ['Susan', 'Florida', 52, 'female',False],
    ['Oliver', None, 54, 'female',True],
    ['Sophie', 'Pennsylvania', 36, 'female',False],
    ['William', None, 48, 'male',True],
    ['Henry', 'Georgia', 42, 'male',False],
    ['Amelia', 'North Carolina', 55, 'female',True],
    ['George', None, 34, 'male',False],
    ['Grace', 'California', 37, 'female',True],
]
Customer_Dataframe = pd.DataFrame(Consumer_data, columns=['name', 'state', 'age','gender','is_active'])
filtered_data = Customer_Dataframe[Customer_Dataframe['state'].isnull()]
print(filtered_data)

Выход:

      name state  age  gender  is_active
2    Peter  None   40    male       True
4   Oliver  None   54  female       True
6  William  None   48    male       True
9   George  None   34    male      False

Снимок экрана: пример использования метода isnull().

Фильтровать DataFrame на основе isnull в Pandas

Код:

import pandas as pd

Consumer_data = [
    ['John', 'California', 30, 'male',True],
    ['Jane', 'Texas', 25, 'female',False],
    ['Peter', None, 40, 'male',True],
    ['Susan', 'Florida', 52, 'female',False],
    ['Oliver', None, 54, 'female',True],
    ['Sophie', 'Pennsylvania', 36, 'female',False],
    ['William', None, 48, 'male',True],
    ['Henry', 'Georgia', 42, 'male',False],
    ['Amelia', 'North Carolina', 55, 'female',True],
    ['George', None, 34, 'male',False],
    ['Grace', 'California', 37, 'female',True],
]
Customer_Dataframe = pd.DataFrame(Consumer_data, columns=['name', 'state', 'age','gender','is_active'])
filtered_data = Customer_Dataframe[Customer_Dataframe['state'].notnull()]
print(filtered_data)

Выход:

      name           state  age  gender  is_active
0     John      California   30    male       True
1     Jane           Texas   25  female      False
3    Susan         Florida   52  female      False
5   Sophie    Pennsylvania   36  female      False
7    Henry         Georgia   42    male      False
8   Amelia  North Carolina   55  female       True
10   Grace      California   37  female       True

Снимок экрана: пример использования метода notnull().

На основе notnull

Заключение

В этом уроке я объяснил, как фильтровать пути DataFrame в Python Pandas, используя 11 различных методов и атрибутов, таких как filter(), query(), isin(), isnull(), notnull(), at[], iat[], loc[], iloc[] и т. д. с некоторыми примерами.

Добавить комментарий