Learning Data Analytics Two: Filtering data in a DataFrame

RedDeveloper
12.03.2023 11:14
Learning Data Analytics Two: Filtering data in a DataFrame

В Learning Data Analytics One: Using Python and Pandas , я рассказываю о:

  1. Импорт модуля pandas и других необходимых модулей
  2. Чтение csv-файла с помощью pandas
  3. DataFrames и некоторые его атрибуты и функции
  4. Функция Plot, подплоты и цвет

Последние несколько дней я изучаю фильтрацию данных в DataFrame.

Давайте поговорим об этом.

Прежде чем мы начнем:

Вы можете получить доступ к данным и моим блокнотам на моем github .

Для кого эта статья лучше всего подходит?

Эта статья лучше всего подходит для новичков в аналитике данных - как и я, эта статья (и последующие серии статей) помогут вам.

Что мы будем рассматривать?

Я расскажу:

  1. Как выбирать столбцы в DataFrame
  2. Сортировка данных в DataFrame
  3. Фильтрация данных с помощью:
    - Условных операторов
    - Функций DataFrame.loc и DataFrame.iloc
    - DataFrame.query(str_query)

Давайте окунемся в это!

Photo by  Ethan Elisara  на  Unsplash
Photo by Ethan Elisara on Unsplash

Во-первых, давайте импортируем pandas и прочитаем наш csv-файл.

# import pandas and give it an alias pd
import pandas as pd

# read csv file
students_performance_data = pd.read_csv('data/students-performance-data.csv')

Вот как это выглядит в моем блокноте jupyter:

Вот как это выглядит в моем блокноте jupyter

Выбор столбцов

Мы можем выбрать столбец в DataFrame с помощью метки столбца.

Например, я хочу выбрать только пол в моем датафрейме.

gender = students_performance_data['gender']

Один столбец в датафрейме называется серией.

Мы можем проверить это с помощью функции type.

Мы можем проверить это с помощью функции type

У серии нет метки столбца, но есть метка строки.

У серии нет метки столбца но есть метка строки

Вы также можете выбрать несколько столбцов в DataFrame. Это можно сделать, передав список меток столбцов.

Я собираюсь выбрать колонки labels gender, test_prep_course, math_score, reading_score и writing_score.

students_scores_data = students_performance_data[
    [
        'gender', 
        'test_prep_course', 
        'math_score', 
        'reading_score', 
        'writing_score'
    ]
]

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

Вы можете выбрать один столбец в DataFrame что даст вам объект Series При выборе

Вот подмножество DataFrame, которое мы выбрали:

Вот подмножество DataFrame которое мы выбрали

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

Функция sort_values() в DataFrame и Series позволяет сортировать данные.

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

Я хочу отсортировать данные по полу, но хочу видеть только 100 верхних строк.

students_score.sort_values(by=['gender']).head(100)
Сортировка по полу
Сортировка по полу

Параметр by функции sort_values() принимает список. Это позволяет сортировать данные по нескольким столбцам!

Здесь я сортирую данные по полу и математическому баллу.

students_score.sort_values(by=['gender', 'math_score']).head(100)
Здесь я сортирую данные по полу и математическому баллу

По умолчанию sort_values() сортирует данные в порядке возрастания, ascending=True. Вы можете отменить это, установив параметр ascending в False.

students_score.sort_values(
  by=['gender', 'math_score'], 
  ascending=False
).head(100)
По умолчанию sort_values() сортирует данные в порядке возрастания ascending=True Вы

Параметр ascending функции sort_values() может также принимать список меток столбцов. При этом список меток столбцов, который вы передаете ему, должен совпадать с параметром by.

students_score[['gender', 'math_score']].sort_values(
    by=['gender', 'math_score'],
    ascending=[True, False]
)

Бывают случаи, когда ваши данные содержат значения NaN (Not a Number). Вы можете использовать функцию sort_values(), чтобы увидеть все эти значения NaN. Это можно сделать, задав параметр na_position. По умолчанию na_position='last', но вы можете изменить это значение.

students_score.sort_values(
    by=['gender', 'math_score'], 
    ascending=False,
    na_position='first'
)
Бывают случаи когда ваши данные содержат значения NaN (Not a Number) Вы можете

С помощью функции sort_values() можно сделать много интересного. Вы можете узнать больше об этом здесь.

Мы подробно рассмотрели выбор столбцов и сортировку данных. Теперь давайте рассмотрим, как можно фильтровать данные в DataFrame.

Выбор строк с помощью: Операторы сравнения

Краткий обзор операторов сравнения в python:

операторы сравнения python
операторы сравнения python

Вы можете использовать операторы сравнения для фильтрации данных в DataFrame.

Здесь я хочу получить всех студентов, чей math_score меньше 75.

students_score[students_score['math_score']<='75']
Здесь я хочу получить всех студентов чей math_score меньше 75

Подождите, почему 75 заключено в одинарную кавычку? Это делает его строкой, а не числом, да? Но когда я убираю одинарную кавычку, python выдает ошибку:

# this will throw an error
students_score[students_score['math_score']<=75]

# the error is:
# TypeError: '<=' not supported between instances of 'str' and 'int'

Помните функцию DataFrame.info()? Вот когда она пригодится. Давайте проверим наш DataFrame и выясним, что является причиной вышеуказанной ошибки.

students_score.info()

Приведенный выше код отобразит типы данных каждого столбца нашего DataFrame.

Приведенный выше код отобразит типы данных каждого столбца нашего DataFrame

Столбец math_score не является целым числом. Это объект. Это происходит потому, что в этом столбце есть значения NaN.

Давайте попробуем другой столбец. На этот раз возьмем всех студентов, чей балл по чтению меньше 75.

students_score[students_score['reading_score']<=75]

На этот раз мы не заключили число 75 в одинарную кавычку, потому что это целое число.

И получаем результат ниже:

И получаем результат ниже

Вот еще один пример:

Я хочу получить всех студентов, которые прошли подготовку к тесту, но чей балл по чтению меньше или равен 75, а по письму меньше 75.

students_score[
    (students_score['test_prep_course'] =='completed') & 
    (students_score['reading_score']<=75) & 
    (students_score['writing_score']<75)
].head(10)
Я хочу получить всех студентов которые прошли подготовку к тесту но чей балл по чтению

Выборка строк с помощью функций isin() и isna()

Функция isin() используется, если вы хотите получить строки данных с определенным списком значений. Я не думаю, что понял это правильно. Позвольте мне показать вам пример вместо этого.

Здесь я извлекаю всех студентов из групп B, C и D. Вместо того чтобы использовать несколько операторов сравнения - например, students_performance_data['ethnicity'] == 'группа B' & students_performance_data['ethnicity'] == 'группа C' и так далее - я использую функцию isin().

students_performance_data[
    (students_performance_data['ethnicity'].isin(
        ['group B', 'group C', 'group D']
    ))
]

Функция isna() используется для определения отсутствующих значений.

students_performance_data[
    students_performance_data['math_score'].isna()
]
Получение отсутствующих математических баллов с помощью функции isna()
Получение отсутствующих математических баллов с помощью функции isna()

Выбор строк и столбцов с помощью: loc и iloc

Свойства loc и iloc используются для доступа к группе строк и столбцов в вашем DataFrame.

Свойство loc используется для доступа к группе строк и столбцов с помощью метки столбца.

students_performance_data.loc[
    :10,
    ['gender', 'test_prep_course', 'math_score']
]

Приведенный выше код вернет первые 10 строк в моем DataFrame и только столбцы 'gender', 'test_prep_course', 'math_score'.

Приведенный выше код вернет первые 10 строк в моем DataFrame и только столбцы 'gender'

Вот еще один пример:

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

students_performance_data.loc[
    students_score['reading_score']<=65,
    ['gender', 'test_prep_course', 'reading_score']
]

Свойство iloc используется для доступа к группе строк и столбцов с помощью индексов.

students_performance_data.iloc[0:10, 3:6]

Iloc выдаст ошибку, если вы укажете, например, метки столбцов.

# this will throw an error
students_performance_data.iloc[
    0:10,
    ['gender', 'test_prep_course', 'reading_score']
]

IndexError: .iloc requires numeric indexers, got ['gender' 'test_prep_course' 'reading_score']

Выборка строк с помощью: Запрос

Используйте функцию query() для фильтрации данных с помощью столбцов.

students_performance_data[
    ['gender', 'ethnicity', 'reading_score']
].query('ethnicity =="group B" & reading_score >= 95')

Отлично!

Мы рассмотрели:

  1. Как выбирать столбцы в DataFrame
  2. Сортировка данных в DataFrame
  3. Фильтрация данных с помощью:
    - Условных операторов
    - Функций DataFrame.loc и DataFrame.iloc
    - DataFrame.query(str_query)

Я предполагаю, что есть больше методов в фильтрации DataFrame. Пока что я оставлю вас с этим. И, надеюсь, я смогу поделиться крошечными вещами о том, чему я научился.

Также, обратите внимание, что в нашем примере есть некорректные данные? Столбцы со значением NaN? На следующем занятии я собираюсь изучить, как очистить данные перед их обработкой. Я поделюсь с вами этим в следующей статье!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?

20.08.2023 18:21

Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в 2023-2024 годах? Или это полная лажа?".

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией

20.08.2023 17:46

В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox

19.08.2023 18:39

Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в частности, магию поплавков и гибкость flexbox.

Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest

19.08.2023 17:22

В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для чтения благодаря своей простоте. Кроме того, мы всегда хотим проверить самые последние возможности в наших проектах!

Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️

18.08.2023 20:33

Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий их языку и культуре.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL

14.08.2023 14:49

Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип предназначен для представления неделимого значения.