В Learning Data Analytics One: Using Python and Pandas , я рассказываю о:
Последние несколько дней я изучаю фильтрацию данных в DataFrame.
Давайте поговорим об этом.
Прежде чем мы начнем:
Вы можете получить доступ к данным и моим блокнотам на моем github .
Для кого эта статья лучше всего подходит?
Эта статья лучше всего подходит для новичков в аналитике данных - как и я, эта статья (и последующие серии статей) помогут вам.
Что мы будем рассматривать?
Я расскажу:
Давайте окунемся в это!
Во-первых, давайте импортируем 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:
Мы можем выбрать столбец в DataFrame с помощью метки столбца.
Например, я хочу выбрать только пол в моем датафрейме.
gender = students_performance_data['gender']
Один столбец в датафрейме называется серией.
Мы можем проверить это с помощью функции 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, которое мы выбрали:
Функция 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)
Параметр 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' )
С помощью функции sort_values() можно сделать много интересного. Вы можете узнать больше об этом здесь.
Мы подробно рассмотрели выбор столбцов и сортировку данных. Теперь давайте рассмотрим, как можно фильтровать данные в DataFrame.
Краткий обзор операторов сравнения в python:
Вы можете использовать операторы сравнения для фильтрации данных в DataFrame.
Здесь я хочу получить всех студентов, чей math_score меньше 75.
students_score[students_score['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.
Столбец 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() используется, если вы хотите получить строки данных с определенным списком значений. Я не думаю, что понял это правильно. Позвольте мне показать вам пример вместо этого.
students_performance_data[ (students_performance_data['ethnicity'].isin( ['group B', 'group C', 'group D'] )) ]
Функция isna() используется для определения отсутствующих значений.
students_performance_data[ students_performance_data['math_score'].isna() ]
Свойства loc и iloc используются для доступа к группе строк и столбцов в вашем DataFrame.
Свойство loc используется для доступа к группе строк и столбцов с помощью метки столбца.
students_performance_data.loc[ :10, ['gender', 'test_prep_course', 'math_score'] ]
Приведенный выше код вернет первые 10 строк в моем DataFrame и только столбцы 'gender', 'test_prep_course', 'math_score'.
Вот еще один пример:
Вместо того чтобы использовать индекс для выбора строк, я использую сравнение для выбора строк и столбцов, которые я хочу увидеть.
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')
Отлично!
Мы рассмотрели:
Я предполагаю, что есть больше методов в фильтрации DataFrame. Пока что я оставлю вас с этим. И, надеюсь, я смогу поделиться крошечными вещами о том, чему я научился.
Также, обратите внимание, что в нашем примере есть некорректные данные? Столбцы со значением NaN? На следующем занятии я собираюсь изучить, как очистить данные перед их обработкой. Я поделюсь с вами этим в следующей статье!
30.03.2023 14:11
В современных веб-приложениях отправка данных из JavaScript на стороне клиента на сервер является распространенной задачей. Одним из популярных способов решения этой задачи является использование запросов AJAX. Однако существуют определенные ситуации, когда AJAX не подходит, например, когда...
30.03.2023 13:54
Отказ от ответственности: Эта статья предназначена только для демонстрации и не должна использоваться в качестве инвестиционного совета.
30.03.2023 12:39
Парадигма объектно-ориентированного программирования имеет 4 основных принципа,
29.03.2023 20:47
Можете ли вы объяснить разницу между ngOnInit и конструктором в Angular?
29.03.2023 12:59
Turbo - это библиотека JavaScript для упрощения создания быстрых и высокоинтерактивных веб-приложений. Она работает с помощью техники под названием "Turbo Links", которая позволяет перемещаться между страницами сайта без полной перезагрузки страницы.
29.03.2023 12:29
HTML, или HyperText Markup Language , является стандартным языком разметки, используемым для создания веб-страниц. Типы ввода HTML - это различные типы элементов управления формами, которые могут использоваться для сбора информации от пользователей на веб-страницах. Существует множество различных...