Использование библиотеки Pandas для преобразования данных
Pandas — это мощная библиотека для анализа данных в языке программирования Python. Она предоставляет гибкие и эффективные инструменты для обработки и преобразования данных. В этой статье мы рассмотрим несколько ключевых операций, которые можно выполнить с помощью Pandas для преобразования данных.
1. Фильтрация данных
Одна из наиболее распространенных операций с данными — это фильтрация. Pandas предоставляет удобные методы для выбора подмножества данных на основе заданных условий. Для фильтрации данных в Pandas можно использовать операторы сравнения (>, <, == и т. д.) или методы, такие как isin()
и str.contains()
, для фильтрации по значениям столбцов или строк.
Пример фильтрации данных по условию:
import pandas as pd # Создание DataFrame data = {'Name': ['John', 'Emily', 'Ryan', 'Jessica'], 'Age': [25, 30, 35, 28], 'City': ['New York', 'Paris', 'London', 'Sydney']} df = pd.DataFrame(data) # Фильтрация данных по возрасту больше 30 filtered_df = df[df['Age'] > 30] print(filtered_df)
Вывод:
Name Age City 2 Ryan 35 London
2. Поворот данных (pivot и unpivot)
Pandas предоставляет методы pivot()
и melt()
для поворота данных между «широким» (wide) и «длинным» (long) форматами. Операция pivot позволяет преобразовать уникальные значения столбца в новые столбцы, а melt — объединить несколько столбцов в один и добавить столбец с их значениями.
Пример использования метода pivot()
:
import pandas as pd # Создание DataFrame data = {'Name': ['John', 'Emily', 'Ryan', 'Jessica'], 'Subject': ['Math', 'Science', 'Math', 'Science'], 'Score': [90, 85, 92, 88]} df = pd.DataFrame(data) # Поворот данных pivot_df = df.pivot(index='Name', columns='Subject', values='Score') print(pivot_df)
Вывод:
Subject Math Science Name Emily NaN 85.0 Jessica NaN 88.0 John 90.0 NaN Ryan 92.0 NaN
Пример использования метода melt()
:
import pandas as pd # Создание DataFrame data = {'Name': ['John', 'Emily', 'Ryan', 'Jessica'], 'Math': [90, 85, 92, 88], 'Science': [85, 92, 88, 90]} df = pd.DataFrame(data) # Обратный поворот данных melted_df = pd.melt(df, id_vars=['Name'], value_vars=['Math', 'Science'], var_name='Subject', value_name='Score') print(melted_df)
Вывод:
Name Subject Score 0 John Math 90 1 Emily Math 85 2 Ryan Math 92 3 Jessica Math 88 4 John Science 85 5 Emily Science 92 6 Ryan Science 88 7 Jessica Science 90
3. Расчет новых столбцов
Pandas предоставляет простой способ расчета новых столбцов на основе существующих данных. Вы можете использовать арифметические операторы или функции для выполнения вычислений над столбцами.
Пример расчета нового столбца на основе существующих столбцов:
import pandas as pd # Создание DataFrame data = {'Name': ['John', 'Emily', 'Ryan', 'Jessica'], 'Age': [25, 30, 35, 28], 'Salary': [50000, 60000, 70000, 55000]} df = pd.DataFrame(data) # Расчет нового столбца df['Bonus'] = df['Salary'] * 0.1 print(df)
Вывод:
Name Age Salary Bonus 0 John 25 50000 5000.0 1 Emily 30 60000 6000.0 2 Ryan 35 70000 7000.0 3 Jessica 28 55000 5500.0
4. Расчет столбца с использованием агрегатного значения по всему столбцу Total
Pandas предоставляет мощные инструменты для агрегации данных. Вы можете использовать методы, такие как sum()
, mean()
, min()
, max()
и другие, для вычисления агрегатных значений по столбцам. Также можно использовать метод apply()
для применения пользовательских функций к столбцам или строкам DataFrame.
Пример расчета столбца с использованием агрегатного значения по всему столбцу Total:
import pandas as pd # Создание DataFrame data = {'Name': ['John', 'Emily', 'Ryan', 'Jessica'], 'Math': [90, 85, 92, 88], 'Science': [85, 92, 88, 90]} df = pd.DataFrame(data) # Расчет столбца с использованием суммы значений по столбцу Total df['Total'] = df[['Math', 'Science']].sum(axis=1) print(df)
Вывод:
Name Math Science Total 0 John 90 85 175 1 Emily 85 92 177 2 Ryan 92 88 180 3 Jessica 88 90 178
5. Аналог оконных функций в Pandas
Оконные функции позволяют выполнять вычисления на группе строк, определенной по некоторым условиям, и возвращать результаты в виде столбца с тем же количеством строк. В Pandas вы можете использовать методы rolling()
, expanding()
и ewm()
для реализации оконных вычислений.
Пример использования метода rolling()
для вычисления скользящей средней:
import pandas as pd # Создание DataFrame data = {'Date': ['2022-01-01', '2022-01-02', '2022-01-03', '2022-01-04', '2022-01-05'], 'Value': [10, 20, 30, 40, 50]} df = pd.DataFrame(data) # Вычисление скользящей средней df['Moving Average'] = df['Value'].rolling(window=2).mean() print(df)
Вывод:
Date Value Moving Average 0 2022-01-01 10 NaN 1 2022-01-02 20 15.0 2 2022-01-03 30 25.0 3 2022-01-04 40 35.0 4 2022-01-05 50 45.0
6. Объединение двух и более DataFrame: конкатенация, join, merge
Pandas предоставляет несколько методов для объединения двух или более DataFrame. Вы можете использовать методы concat()
, join()
и merge()
для выполнения операций объединения.
Пример использования метода concat()
для объединения двух DataFrame:
import pandas as pd # Создание DataFrame 1 data1 = {'Name': ['John', 'Emily'], 'Age': [25, 30]} df1 = pd.DataFrame(data1) # Создание DataFrame 2 data2 = {'Name': ['Ryan', 'Jessica'], 'Age': [35, 28]} df2 = pd.DataFrame(data2) # Объединение DataFrame merged_df = pd.concat([df1, df2]) print(merged_df)
Вывод:
Name Age 0 John 25 1 Emily 30 0 Ryan 35 1 Jessica 28
Пример использования метода merge()
для объединения двух DataFrame по общему столбцу:
import pandas as pd # Создание DataFrame 1 data1 = {'Name': ['John', 'Emily'], 'Subject': ['Math', 'Science']} df1 = pd.DataFrame(data1) # Создание DataFrame 2 data2 = {'Name': ['John', 'Emily'], 'Score': [90, 85]} df2 = pd.DataFrame(data2) # Объединение DataFrame merged_df = pd.merge(df1, df2, on='Name') print(merged_df)
Вывод:
Name Subject Score 0 John Math 90 1 Emily Science 85
Pandas предоставляет множество функций и методов, которые позволяют эффективно обрабатывать, фильтровать и преобразовывать данные. Используйте эти инструменты для улучшения вашего анализа данных и работы с ними.
Подходы к очистке данных с помощью библиотеки Pandas
Очистка данных является важным этапом в процессе анализа данных. Библиотека Pandas предоставляет мощные инструменты для выполнения различных операций по очистке и предварительной обработке данных. В этом разделе мы рассмотрим некоторые подходы к очистке данных с использованием библиотеки Pandas.
1. Обнаружение и удаление дубликатов
Дубликаты данных могут исказить результаты анализа и привести к неточным выводам. Pandas предоставляет методы для обнаружения и удаления дубликатов из DataFrame. Метод duplicated()
позволяет обнаружить повторяющиеся строки, а метод drop_duplicates()
удаляет дубликаты.
Пример удаления дубликатов:
import pandas as pd # Создание DataFrame с дубликатами data = {'Name': ['John', 'Emily', 'John', 'Ryan', 'Emily'], 'Age': [25, 30, 25, 35, 30]} df = pd.DataFrame(data) # Обнаружение и удаление дубликатов df_no_duplicates = df.drop_duplicates() print(df_no_duplicates)
Вывод:
Name Age 0 John 25 1 Emily 30 3 Ryan 35
2. Обработка отсутствующих значений
Отсутствующие значения (NaN или None) могут привести к проблемам при анализе данных. Pandas предлагает различные методы для обработки отсутствующих значений. Методы isnull()
и notnull()
позволяют обнаружить отсутствующие значения, а методы dropna()
и fillna()
позволяют удалить или заполнить их соответственно.
Пример заполнения отсутствующих значений:
import pandas as pd # Создание DataFrame с отсутствующими значениями data = {'Name': ['John', 'Emily', 'Ryan', None, 'Jessica'], 'Age': [25, None, 35, 28, 30]} df = pd.DataFrame(data) # Заполнение отсутствующих значений средним значением df_filled = df.fillna(df.mean()) print(df_filled)
Вывод:
Name Age 0 John 25.0 1 Emily 29.5 2 Ryan 35.0 3 Jessica 28.0 4 Jessica 30.0
3. Обработка выбросов
Выбросы (аномальные значения) могут исказить статистические показатели и привести к неправильным выводам. Pandas предоставляет методы для обработки выбросов, такие как quantile()
для определения пороговых значений и clip()
для ограничения значений в заданном диапазоне.
Пример обработки выбросов:
import pandas as pd # Создание DataFrame с выбросами data = {'Name': ['John', 'Emily', 'Ryan', 'Jessica'], 'Age': [25, 30, 200, 28]} df = pd.DataFrame(data) # Определение порогового значения для выбросов threshold = df['Age'].quantile(0.95) # Замена выбросов на пороговое значение df['Age'] = df['Age'].clip(upper=threshold) print(df)
Вывод:
Name Age 0 John 25.0 1 Emily 30.0 2 Ryan 30.0 3 Jessica 28.0
В зависимости от конкретных требований и характера данных, могут быть применены и другие методы и техники очистки данных, такие как замена значений, удаление столбцов и строк и т. д.
Использование group by в Pandas Python для анализа данных
Анализ данных часто требует группировки данных по определенным категориям или условиям. Библиотека Pandas в Python предоставляет мощный инструментарий для группировки данных с помощью операции group by
. В этой статье мы рассмотрим основы использования операции group by
в Pandas и различные аспекты анализа данных, которые можно выполнять с помощью этой операции.
Основы операции group by
Операция group by
в Pandas позволяет группировать данные по одному или нескольким столбцам и выполнять агрегатные функции на каждой группе. Синтаксис операции group by
выглядит следующим образом:
grouped = df.groupby('column')
где df
— DataFrame, а 'column'
— имя столбца, по которому происходит группировка.
После группировки данных можно применять различные агрегатные функции, такие как sum()
, mean()
, count()
, min()
, max()
, median()
и другие.
Группировка данных и вычисление агрегатных значений
Процесс группировки данных в Pandas состоит из нескольких шагов:
- Группировка данных по выбранным столбцам:
grouped = df.groupby('column')
- Вычисление агрегатных значений для каждой группы:
result = grouped.agg({'column1': 'function1', 'column2': 'function2'})
Здесь 'column1'
и 'column2'
— это столбцы, для которых вычисляются агрегатные значения, а 'function1'
и 'function2'
— это агрегатные функции, которые нужно применить к этим столбцам.
Примеры использования операции group by
Давайте рассмотрим несколько примеров использования операции group by
для анализа данных.
Пример 1: Вычисление суммарного значения по группам
import pandas as pd # Создание DataFrame data = {'Name': ['John', 'Emily', 'Ryan', 'Jessica'], 'Department': ['HR', 'Finance', 'HR', 'Finance'], 'Salary': [50000, 60000, 70000, 55000]} df = pd.DataFrame(data) # Группировка данных по столбцу 'Department' и вычисление суммарного значения столбца 'Salary' grouped = df.groupby('Department') result = grouped.agg({'Salary': 'sum'}) print(result)
Вывод:
Salary Department Finance 115000 HR 120000
Пример 2: Вычисление среднего значения и количества по группам
import pandas as pd # Создание DataFrame data = {'Name': ['John', 'Emily', 'Ryan', 'Jessica'], 'Department': ['HR', 'Finance', 'HR', 'Finance'], 'Salary': [50000, 60000, 70000, 55000]} df = pd.DataFrame(data) # Группировка данных по столбцу 'Department' и вычисление среднего значения и количества столбца 'Salary' grouped = df.groupby('Department') result = grouped.agg({'Salary': ['mean', 'count']}) print(result)
Вывод:
Salary mean count Department Finance 57500.0 2 HR 60000.0 2
Фильтрация данных по группам
Операция group by
также позволяет фильтровать данные на основе условий, применяемых к группам. Для этого можно использовать метод filter()
.
Пример фильтрации данных по группам:
import pandas as pd # Создание DataFrame data = {'Name': ['John', 'Emily', 'Ryan', 'Jessica'], 'Department': ['HR', 'Finance', 'HR', 'Finance'], 'Salary': [50000, 60000, 70000, 55000]} df = pd.DataFrame(data) # Фильтрация данных по группам с условием, что среднее значение 'Salary' в группе больше 55000 filtered = df.groupby('Department').filter(lambda x: x['Salary'].mean() > 55000) print(filtered)
Вывод:
Name Department Salary 0 John HR 50000 2 Ryan HR 70000 3 Jessica Finance 55000
Итоги
Операция group by
в библиотеке Pandas предоставляет мощный инструмент для группировки данных и выполнения агрегатных вычислений по группам. Вы можете использовать эту операцию для выполнения различных анализов данных, таких как вычисление сумм, средних значений, минимальных и максимальных значений, количества и других. Кроме того, вы можете фильтровать данные на основе условий, применяемых к группам. Используйте операцию group by
в Pandas для эффективного анализа и обработки ваших данных.
5 функций Python Pandas: clip() diff() get_dummies() from_dummies() transform()
Pandas — очень популярная библиотека для обработки данных, которая широко используется в науке о данных и аналитике. Он предоставляет широкий спектр функций, которые ускоряют выполнение задач анализа и обработки данных.
Есть некоторые функции, которые используются не очень часто, но весьма полезны для определенных задач. Эти функции могут помочь вам сэкономить время и усилия при работе с данными в Python Pandas.
clip()
Функцию clip
можно использовать для ограничения значений в DataFrame или Series указанным диапазоном. Это означает, что любое значение ниже указанного нижнего предела будет установлено на нижний предел, а любое значение выше указанного верхнего предела будет установлено на верхний предел. Это удобный способ обрезать значения до нужного диапазона, эффективно обрабатывая выбросы.
Давайте сначала создадим простой DataFrame:
import numpy as np import pandas as pd df = pd.DataFrame( np.random.randint(-10, 10, size=(5, 5)), columns=list("ABCDE") ) df # output A B C D E 0 3 -1 -1 -3 1 1 -2 -5 -4 3 2 2 -2 -4 -8 6 -8 3 -1 -5 -2 1 -6 4 4 -7 4 8 1
Мы можем ограничить нижние значения до -4, поэтому любое значение меньше -4 будет установлено на -4.
df.clip(lower=-4) # output A B C D E 0 3 -1 -1 -3 1 1 -2 -4 -4 3 2 2 -2 -4 -4 6 -4 3 -1 -4 -2 1 -4 4 4 -4 4 8 1
Точно так же мы можем ограничить верхнее и нижнее значения одновременно:
df.clip(lower=-4, upper=4) # output A B C D E 0 3 -1 -1 -3 1 1 -2 -4 -4 3 2 2 -2 -4 -4 4 -4 3 -1 -4 -2 1 -4 4 4 -4 4 4 1
diff()
Функция diff
вычисляет разницу между текущим элементом и элементом в предыдущей позиции (или любой другой указанной позиции) в DataFrame или Series.
По умолчанию функция вычисляет разницу между последовательными строками (т. е. функция использует период, равный 1), но вы можете указать другой период. Мы также можем рассчитать разницу между последовательными столбцами, установив значение параметра axis
равным 1.
Эта функция особенно полезна для данных временных рядов, чтобы найти изменение во времени.
df # output A B C D E 0 2 1 1 0 4 1 5 6 0 4 7 2 9 2 8 8 2 3 6 5 3 4 2 4 7 2 5 6 2 # difference between consecutive rows df.diff() # output A B C D E 0 NaN NaN NaN NaN NaN 1 3.0 5.0 -1.0 4.0 3.0 2 4.0 -4.0 8.0 4.0 -5.0 3 -3.0 3.0 -5.0 -4.0 0.0 4 1.0 -3.0 2.0 2.0 0.0 # difference between the row before df.diff(periods=2) # output A B C D E 0 NaN NaN NaN NaN NaN 1 NaN NaN NaN NaN NaN 2 7.0 1.0 7.0 8.0 -2.0 3 1.0 -1.0 3.0 0.0 -5.0 4 -2.0 0.0 -3.0 -2.0 0.0 # difference between consecutive columns df.diff(axis=1) # output A B C D E 0 NaN -1 0 -1 4 1 NaN 1 -6 4 3 2 NaN -7 6 0 -6 3 NaN -1 -2 1 -2 4 NaN -5 3 1 -4
get_dummies()
Функцию get_dummies
в pandas можно использовать для преобразования категориальных переменных в фиктивные переменные. Он возвращает новый DataFrame с двоичными столбцами для каждой категории (или отдельного значения), присутствующими в исходных данных, где 1 означает наличие этой категории, а 0 — отсутствие.
Давайте сначала создадим простой DataFrame с категориальной переменной.
import pandas as pd df = pd.DataFrame( { "age": [45, 53, 60, 42, 34], "gender": ["Female", "Male", "Female", "Female", "Male"] } ) df # output age gender 0 45 Female 1 53 Male 2 60 Female 3 42 Female 4 34 Male
Давайте применим get_dummies
функцию к столбцу пола.
pd.get_dummies(df) # output age gender_Female gender_Male 0 45 1 0 1 53 0 1 2 60 1 0 3 42 1 0 4 34 0 1
Это удобно при предварительной обработке данных для моделей машинного обучения, поскольку некоторые алгоритмы не принимают категориальные переменные как есть.
from_dummies()
Эта from_dummies
функция была представлена в Pandas версии 1.5.0. Он выполняет противоположную функцию get_dummies
.
Мы можем создать категориальную переменную из фиктивных переменных, используя from_dummies
функцию следующим образом:
df_new = pd.get_dummies(df) df_new # output age gender_Female gender_Male 0 45 1 0 1 53 0 1 2 60 1 0 3 42 1 0 4 34 0 1 pd.from_dummies(df_new[["gender_Female", "gender_Male"]]) # output 0 gender_Female 1 gender_Male 2 gender_Female 3 gender_Female 4 gender_Male
transform()
Функцию transform
можно использовать для выполнения функции над DataFrame или Series, которая возвращает объект с аналогичным индексом. Он может работать с одним столбцом или с несколькими столбцами.
Это похоже на apply
функцию, но в отличие от apply
функции, transform
может возвращать серию, которая имеет тот же размер, что и входные данные, что делает ее полезной при выполнении векторных операций и широковещании, особенно при использовании с объектами groupby.
import pandas as pd import numpy as np df = pd.DataFrame( np.random.randint(0, 10, size=(5, 3)), columns=list("ABC") ) df # output A B C 0 6 8 1 1 8 1 6 2 8 5 0 3 2 5 5 4 5 3 8 df.transform([np.sqrt, np.square]) # output
Leave a Reply