Использование библиотеки Pandas для преобразования данных

Содержание статьи

Использование библиотеки 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 состоит из нескольких шагов:

  1. Группировка данных по выбранным столбцам:
grouped = df.groupby('column')
  1. Вычисление агрегатных значений для каждой группы:
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

5 1 голос
Рейтинг статьи
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x