Перейти к содержимому

Какой метод посчитает элементы в столбце датафрейма

  • автор:

Pandas: как подсчитать значения в столбце с условием

Вы можете использовать следующие методы для подсчета количества значений в столбце pandas DataFrame с определенным условием:

Метод 1: подсчет значений в одном столбце с условием

len(df[df['col1']=='value1']) 

Способ 2: подсчет значений в нескольких столбцах с условиями

len(df[(df['col1']=='value1') &(df['col2']=='value2')]) 

В следующих примерах показано, как использовать каждый метод на практике со следующими пандами DataFrame:

import pandas as pd #create DataFrame df = pd.DataFrame() #view DataFrame print(df) team pos points 0 A Gu 18 1 A Fo 22 2 A Fo 19 3 A Fo 14 4 B Gu 14 5 B Gu 11 6 B Fo 20 7 B Fo 28 

Пример 1. Подсчет значений в одном столбце с условием

В следующем коде показано, как подсчитать количество значений в столбце команды , где значение равно ‘A’:

#count number of values in team column where value is equal to 'A' len(df[df['team']=='A']) 4 

Мы видим, что в столбце команды есть 4 значения, где значение равно «А».

Пример 2. Подсчет значений в нескольких столбцах с условиями

В следующем коде показано, как подсчитать количество строк в DataFrame, где столбец team равен «B», а столбец pos равен «Gu»:

#count rows where team is 'B' and pos is 'Gu' len(df[(df['team']=='B') &(df['pos']=='Gu')]) 2 

Мы видим, что в DataFrame есть 2 строки, которые удовлетворяют обоим этим условиям.

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

Например, следующий код показывает, как подсчитать количество строк, удовлетворяющих трем условиям:

#count rows where team is 'B' and pos is 'Gu' and points > 15 len(df[(df['team']=='B') &(df['pos']=='Gu') &(df['points']> 12 )]) 1 

Мы видим, что только 1 строка в DataFrame соответствует всем трем этим условиям.

Дополнительные ресурсы

В следующих руководствах объясняется, как выполнять другие распространенные задачи в pandas:

Как узнать количество строк в таблице python

Чтобы подсчитать количество строк в DataFrame, вы можете использовать свойство dataframe.shape или dataframe.count() .

Dataframe.shape возвращает кортеж, содержащий количество строк в качестве первого элемента и количества столбцов в качестве второго элемента. Индексируя первый элемент, мы можем получить количество строк в DataFrame:

import pandas as pd # initialize dataframe df = pd.DataFrame('a': [1, 4, 7, 2], 'b': [2, 0, 8, 7]>) # number of rows in dataframe num_rows = df.shape[0] print('Number of Rows in DataFrame :',num_rows) # => Number of Rows in DataFrame : 4 

Dataframe.count() , с значениями параметров по умолчанию возвращает количество значений вдоль каждого столбца. А в DataFrame каждый столбец содержит одинаковое количество значений, равных количеству строк. Индексируя первый элемент, мы можем получить количество строк в DataFrame:

import pandas as pd # initialize dataframe df = pd.DataFrame('a': [1, 4, 7, 2], 'b': [2, 0, 8, 7]>) # number of rows in dataframe num_rows = df.count()[0] print('Number of Rows in DataFrame :',num_rows) # => Number of Rows in DataFrame : 4 

8 примеров использования value_counts из Pandas

Прежде чем начинать работать над проектом, связанным с данными, нужно посмотреть на набор данных. Разведочный анализ данных (EDA) — очень важный этап, ведь данные могут быть запутанными, и очень многое может пойти не по плану в процессе работы.

В библиотеке Pandas есть несколько функций для решения этой проблемы, и value_counts — одна из них. Она возвращает объект, содержащий уникальные значения из dataframe Pandas в отсортированном порядке. Однако многие забывают об этой возможности и используют параметры по умолчанию. В этом материале посмотрим, как получить максимум пользы от value_counts , изменив параметры по умолчанию.

Что такое функция value_counts()?

Функция value_counts() используется для получения Series , содержащего уникальные значения. Она вернет результат, отсортированный в порядке убывания, так что первый элемент в коллекции будет самым встречаемым. NA-значения не включены в результат.

Синтаксис
df[‘your_column’].value_counts() — вернет количество уникальных совпадений в определенной колонке.

Важно заметить, что value_counts работает только с series, но не dataframe. Поэтому нужно указать одни квадратные скобки df[‘your_column’] , а не пару df[[‘your_column’]] .

Параметры:

  • normalize (bool, по умолчанию False) — если True , то возвращаемый объект будет содержать значения относительно частоты встречаемых значений.
  • sort (bool, по умолчанию True) — сортировка по частоте.
  • ascending (bool, по умолчанию False) — сортировка по возрастанию.
  • bins (int) — вместе подсчета значений группирует их по отрезкам, но это работает только с числовыми данными.
  • dropna (bool, по умолчанию True) — не включать количество NaN.

Загрузка данных для демонстрации

Рассмотрим, как использовать этот метод на реальных данных. Возьмем в качестве примера датасет из курса Coursera на Kaggle.

Для начала импортируем нужные библиотеки и сами данные. Это нужно в любом проекте. После этого проанализируем данные в notebook Jupyter.

 
# импорт библиотеки import pandas as pd # Загрузка данных df = pd.read_csv('Downloads/coursea_data.csv', index_col=0) # проверка данных из csv df.head(10)

8 примеров использования value_counts из Pandas

Проверьте, сколько записей в датасете и есть ли у нас пропуски.

 
df.info()

Результат показывает, что в наборе 981 запись, и нет ни одного NA.

 Int64Index: 891 entries, 134 to 163 Data columns (total 6 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 course_title 891 non-null object 1 course_organization 891 non-null object 2 course_Certificate_type 891 non-null object 3 course_rating 891 non-null float64 4 course_difficulty 891 non-null object 5 course_students_enrolled 891 non-null object dtypes: float64(1), object(5) memory usage: 48.7+ KB

1. value_counts с параметрами по умолчанию

Теперь можно начинать использовать функцию value_counts . Начнем с базового применения функции.

Синтаксис: df['your_column'].value_counts() .

Получим количество каждого значения для колонки «course_difficulty».

Функция value_counts вернет количество совпадений всех уникальных значений по заданному индексу без пропусков. Это позволит увидеть, что больше всего курсов с уровнем сложности «Начинающий», после этого идут «Средний» и «Смешанный». А «Сложный» на последнем месте.

df['course_difficulty'].value_counts() --------------------------------------------------- Beginner 487 Intermediate 198 Mixed 187 Advanced 19 Name: course_difficulty, dtype: int64

Теперь время поработать с параметрами.

2. Сортировка по возрастанию

По умолчанию value_counts() возвращает данные по убыванию. Изменит поведение можно, задав значение True для параметра ascending .

Синтаксис: df['your_column'].value_counts(ascending=True) .

df['course_difficulty'].value_counts(ascending=True) --------------------------------------------------- Advanced 19 Mixed 187 Intermediate 198 Beginner 487 Name: course_difficulty, dtype: int64

3. Сортировка в алфавитном порядке

В определенных случаях может существовать необходимость отсортировать записи в алфавитном порядке. Это делается с помощью добавления sort_index(ascending=True) после value_counts() .

По умолчанию функция сортирует «course_difficulty» по количеству совпадений, а с sort_index сортирует по индексу (имени колонки, для которой и используется функция):

df['course_difficulty'].value_counts().sort_index(ascending=True) --------------------------------------------------- Advanced 19 Beginner 487 Intermediate 198 Mixed 187 Name: course_difficulty, dtype: int64

Если же требуется отобразить value_counts() в обратном алфавитном порядке, то нужно изменить направление сортировки: .sort_index(ascending=False) .

4. Сортировка по значению, а затем по алфавиту

Для этого примера используем другой датасет.

 
df_fruit = pd.DataFrame(< 'fruit': ['хурма']*5 + ['яблоки']*5 + ['бананы']*3 + ['персики']*3 + ['морковь']*3 + ['абрикосы'] + ['манго']*2 >)

Так, нужно получить вывод, отсортированный в первую очередь по количеству совпадений значений, а потом уже и по алфавиту. Это можно сделать, объединив value_counts() c sort_index(ascending=False) и sort_values(ascending=False) .

df_fruit['fruit'].value_counts()\ .sort_index(ascending=False)\ .sort_values(ascending=False) ------------------------------------------------- хурма 5 яблоки 5 бананы 3 морковь 3 персики 3 манго 2 абрикосы 1 Name: fruit, dtype: int64

5. Относительная частота уникальных значений

Иногда нужно получить относительные значения, а не просто количество. С параметром normalize=True объект вернет относительную частоту уникальных значений. По умолчанию значение этого параметра равно False .

Синтаксис: df['your_column'].value_counts(normalize=True) .

df['course_difficulty'].value_counts(normalize=True) ------------------------------------------------- Beginner 0.546577 Intermediate 0.222222 Mixed 0.209877 Advanced 0.021324 Name: course_difficulty, dtype: float64

6. value_counts() для разбивки данных на дискретные интервалы

Еще один трюк, который часто игнорируют. value_counts() можно использовать для разбивки данных на дискретные интервалы с помощью параметра bin . Это работает только с числовыми данными. Принцип напоминает pd.cut . Посмотрим как это работает на примере колонки «course_rating». Сгруппируем значения колонки на 4 группы.

Синтаксис: df['your_column'].value_counts(bin=количество групп) .

df['course_rating'].value_counts(bins=4) ------------------------------------------------- (4.575, 5.0] 745 (4.15, 4.575] 139 (3.725, 4.15] 5 (3.297, 3.725] 2 Name: course_rating, dtype: int64

Бинниг позволяет легко получить инсайты. Так, можно увидеть, что большая часть людей оценивает курс на 4.5. И лишь несколько курсов имеют оценку ниже 4.15.

7. value_counts() с пропусками

По умолчанию количество значений NaN не включается в результат. Но это поведение можно изменить, задав значение False для параметра dropna . Поскольку в наборе данных нет нулевых значений, в этом примере это ни на что не повлияет. Но сам параметр следует запомнить.

Синтаксис: df['your_column'].value_counts(dropna=False) .

8. value_counts() как dataframe

Как уже было отмечено, value_counts() возвращает Series, а не Dataframe. Если же нужно получить результаты в последнем виде, то для этого можно использовать функцию .to_frame() после .value_counts() .

Синтаксис: df['your_column'].value_counts().to_frame() .

Это будет выглядеть следующим образом:

value_counts() как dataframe

Если нужно задать имя для колонки или переименовать существующую, то эту конвертацию можно реализовать другим путем.

 
value_counts = df['course_difficulty'].value_counts() # преобразование в df и присвоение новых имен колонкам df_value_counts = pd.DataFrame(value_counts) df_value_counts = df_value_counts.reset_index() df_value_counts.columns = ['unique_values', 'counts for course_difficulty'] df_value_counts

Groupby и value_counts

Groupby — очень популярный метод в Pandas. С его помощью можно сгруппировать результат по одной колонке и посчитать значения в другой.

Синтаксис: df.groupby('your_column_1')['your_column_2'].value_counts() .

Так, с помощью groupby и value_counts можно посчитать количество типов сертификатов для каждого уровня сложности курсов.

df.groupby('course_difficulty')['course_Certificate_type'].value_counts() ------------------------------------------------- course_difficulty course_Certificate_type Advanced SPECIALIZATION 10 COURSE 9 Beginner COURSE 282 SPECIALIZATION 196 PROFESSIONAL CERTIFICATE 9 Intermediate COURSE 104 SPECIALIZATION 91 PROFESSIONAL CERTIFICATE 3 Mixed COURSE 187 Name: course_Certificate_type, dtype: int64

Это мульти-индекс, позволяющий иметь несколько уровней индексов в dataframe. В этом случае сложность курса соответствует нулевому уровню индекса, а тип сертификата — первому.

Фильтрация значений по минимум и максимум

Работая с набором данных, может потребоваться вернуть количество ограниченных вхождений с помощью value_counts() .

Синтаксис: df['your_column'].value_counts().loc[lambda x : x > 1] .

Этот код отфильтрует все значения уникальных данных и покажет только те, где значение больше единицы.

Для примера ограничим рейтинг курса значением 4.

df.groupby('course_difficulty')['coudf['course_rating']\ .value_counts().loc[lambda x: x > 4] ------------------------------------------------- 4.8 256 4.7 251 4.6 168 4.5 80 4.9 68 4.4 34 4.3 15 4.2 10 Name: course_rating, dtype: int64

value_counts() — удобный инструмент, позволяющий делать удобный анализ в одну строку.

Тест на знание функции value_counts

Дана колонка с днями недели, где 1 - понедельник, 7 - воскресенье. Как получить относительное количество только будних дней?

Чтение и запись файлов JSON в Python с помощью Pandas

Библиотека Pandas предоставляет классы и функционал для чтения, обработки и визуализации данных, хранящихся в различных форматах. В этой статье мы научимся считывать и записывать данные JSON, используя Python и Pandas.

Обновлено: 2023-06-24 19:58:28 Вадим Дворников автор материала

Создание файла JSON

Сначала мы создадим файл с использованием ядра Python, а затем считаем и запишем в него данные с помощью Pandas.

Создание данных JSON через вложенные словари

В Python для создания данных JSON можно использовать вложенные словари. Каждый элемент во внешнем словаре соответствует столбцу в файле JSON.

Ключ каждого элемента – заголовок столбца, а значение – другой словарь, состоящий из строк столбца. Реализуем словарь, который можно использовать для создания файла JSON со списком вымышленных пациентов:

patients = < "Name":, "Gender":, "Nationality":, "Age" : >

В приведенном выше коде первый элемент соответствует столбцу Name. Значение элемента состоит из словаря, в котором элементы являются строками. Ключи внутренних элементов словаря соответствуют порядковым номерам строк, где значения представляют значения строк.

Создание данных JSON через вложенные словари

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

Создание данных JSON через списки словарей

Еще один способ создания данных в формате JSON – использование списка словарей. Каждый элемент в списке состоит из словаря, а каждый словарь представляет строку. Этот подход удобнее для чтения, по сравнению с использованием вложенных словарей.

Создадим список для файла JSON, в котором хранится информация о разных автомобилях:

cars = [ , , , , ]

Каждому элементу словаря соответствует строка в файле JSON. Например, первый элемент в первом словаре хранит в столбце Name значение Honda. Значение в первой строке столбца Price будет 10000 и так далее.

Запись данных в файл JSON через Python

С помощью вложенных словарей и списков словарей можно сохранить данные в файле JSON. Для этого мы будем использовать модуль json и метод dump():

import json with open('E:/datasets/patients.json', 'w') as f: json.dump(patients, f) with open('E:/datasets/cars.json', 'w') as f: json.dump(cars, f)

Теперь у нас есть два файла JSON - patients.json и cars.json.

Чтение файлов JSON с помощью Pandas

Чтобы прочитать файл JSON с помощью Pandas, вызовем метод read_json() и передадим ему путь к файлу, который нужно прочитать. Метод возвращает DataFrame, который хранит данные в виде столбцов и строк.

Но сначала нужно установить библиотеку Pandas:

$ pip install pandas

Чтение JSON из локальных файлов

Приведенный ниже скрипт считывает файл patients.json из локальной системной директории и сохраняет результат во фрейме данных patients_df. Затем заголовок фрейма выводится с помощью метода head():

import pandas as pd patients_df = pd.read_json('E:/datasets/patients.json') patients_df.head()

Запуск этого кода должен дать следующий результат:

Чтение JSON из локальных файлов

Следующий скрипт считает файл cars.json из локальной системы и затем вызовет метод head()cars_df для вывода заголовка:

cars_df = pd.read_json('E:/datasets/cars.json') cars_df.head()

Результат запуска этого кода:

Чтение JSON из локальных файлов - 2

Чтение JSON из удаленных файлов

С помощью метода read_json() также можно считывать файлы JSON, расположенные на удаленных серверах. Для этого нужно передать в вызов функции путь удаленного файла JSON.

Давайте прочитаем и выведем заголовок из Iris Dataset:

import pandas as pd iris_data = pd.read_json("https://raw.githubusercontent.com/domoritz/maps/master/data/iris.json") iris_data.head()

Результат запуска этого кода:

Чтение JSON из удаленных файлов

Запись файлов данных JSON с помощью Pandas

Чтобы преобразовать фрейм данных Pandas в файл JSON, используем функцию to_json() и передадим ей в качестве параметра путь к файлу, который будет создан.

Создадим файл JSON из набора данных tips, который включен в библиотеку Seaborn. Но сначала установим ее:

$ pip install seaborn

Затем импортируем ее и загрузим подсказки в набор данных:

import seaborn as sns dataset = sns.load_dataset('tips') dataset.head()

Ниже показано как выглядит набор данных:

Запись файлов данных JSON с помощью Pandas

Функция Seaborn load_dataset() возвращает DataFrame, поэтому загрузка набора данных позволяет вызвать функцию to_json() для ее преобразования.

После получения доступа к набору данных, сохраним его содержимое в файле JSON. Мы создали для этого каталог datasets:

dataset.to_json('E:/datasets/tips.json')

Перейдя в каталог E:/datasets, вы должны увидеть там файл tips.json, JSON-данные которого соответствует записям во фрейме данных Pandas tips:

 < "total_bill":< "0":16.99, "1":10.34, "2":21.01, "3":23.68, "4":24.59, "5":25.29, . >"tip": < "0":1.01, "1":1.66, "2":3.5, "3":3.31, "4":3.61, "5":4.71, . >"sex": < "0":"Female", "1":"Male", "2":"Male", "3":"Male", "4":"Female", "5":"Male", . >"smoker": < "0":"No", "1":"No", "2":"No", "3":"No", "4":"No", "5":"No", . >.

Заключение

В этой статье мы рассмотрели, как считывать и записывать файлы JSON, используя популярную библиотеку Pandas Python.

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *