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() используется, если вы хотите получить строки данных с определенным списком значений. Я не думаю, что понял это правильно. Позвольте мне показать вам пример вместо этого.

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? На следующем занятии я собираюсь изучить, как очистить данные перед их обработкой. Я поделюсь с вами этим в следующей статье!

Асинхронная передача данных с помощью sendBeacon в JavaScript
Асинхронная передача данных с помощью sendBeacon в JavaScript

30.03.2023 14:11

В современных веб-приложениях отправка данных из JavaScript на стороне клиента на сервер является распространенной задачей. Одним из популярных способов решения этой задачи является использование запросов AJAX. Однако существуют определенные ситуации, когда AJAX не подходит, например, когда...

Как подобрать выигрышные акции с помощью анализа и визуализации на Python
Как подобрать выигрышные акции с помощью анализа и визуализации на Python

30.03.2023 13:54

Отказ от ответственности: Эта статья предназначена только для демонстрации и не должна использоваться в качестве инвестиционного совета.

Принципы ООП в JavaScript
Принципы ООП в JavaScript

30.03.2023 12:39

Парадигма объектно-ориентированного программирования имеет 4 основных принципа,

Пройдите собеседование по Angular: Общие вопросы и ответы экспертов
Пройдите собеседование по Angular: Общие вопросы и ответы экспертов

29.03.2023 20:47

Можете ли вы объяснить разницу между ngOnInit и конструктором в Angular?

Laravel с Turbo JS
Laravel с Turbo JS

29.03.2023 12:59

Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием "Turbo Links", которая позволяет перемещаться между страницами сайта без полной перезагрузки страницы.

Типы ввода HTML: Лучшие практики и советы
Типы ввода HTML: Лучшие практики и советы

29.03.2023 12:29

HTML, или HyperText Markup Language , является стандартным языком разметки, используемым для создания веб-страниц. Типы ввода HTML - это различные типы элементов управления формами, которые могут использоваться для сбора информации от пользователей на веб-страницах. Существует множество различных...