Какие функции pandas отсутствуют в NumPy: полный справочник для Python-разработчиков

Краткий обзор pandas и NumPy: основные области применения

NumPy и pandas — фундаментальные библиотеки Python для работы с данными. NumPy предоставляет мощные инструменты для выполнения численных операций с многомерными массивами. pandas, в свою очередь, построен на основе NumPy и предлагает расширенную функциональность для анализа и манипулирования табличными данными. Pandas упрощает работу с гетерогенными данными, предоставляет инструменты для обработки пропущенных значений и обеспечивает удобные методы для статистического анализа и визуализации.

Почему важно понимать различия в функциональности?

Понимание различий между pandas и NumPy позволяет разработчикам эффективно выбирать подходящий инструмент для решения конкретной задачи. Неправильный выбор может привести к снижению производительности, усложнению кода и увеличению времени разработки. В некоторых случаях использование pandas может быть избыточным, тогда как в других — без его функциональности не обойтись.

Функции pandas для работы с табличными данными, отсутствующие в NumPy

Работа с Series и DataFrame: создание, индексация, выборка данных

В pandas основными структурами данных являются Series (одномерный массив с метками) и DataFrame (двумерная таблица). NumPy оперирует только однородными массивами ndarray. pandas предоставляет гибкие возможности индексации и выборки данных по меткам и условиям, которые отсутствуют в NumPy.

import pandas as pd
import numpy as np

# Создание Series из NumPy массива
data: np.ndarray = np.array([10, 20, 30, 40, 50])
series: pd.Series = pd.Series(data, index=['a', 'b', 'c', 'd', 'e'])
print(series)
# a    10
# b    20
# c    30
# d    40
# e    50
# dtype: int64

# Создание DataFrame из словаря
data_dict: dict = {'col1': [1, 2, 3], 'col2': [4, 5, 6], 'col3': [7, 8, 9]}
df: pd.DataFrame = pd.DataFrame(data_dict, index=['row1', 'row2', 'row3'])
print(df)
#       col1  col2  col3
# row1     1     4     7
# row2     2     5     8
# row3     3     6     9

# Индексация и выборка по меткам (loc) и позиции (iloc)
print(df.loc['row2', 'col2']) # 5
print(df.iloc[1, 1]) # 5

# Выборка по условию
print(df[df['col1'] > 1])
#       col1  col2  col3
# row2     2     5     8
# row3     3     6     9

Обработка пропущенных значений (NaN): методы fillna(), dropna()

pandas предоставляет удобные методы для работы с пропущенными значениями (NaN), которые часто встречаются в реальных наборах данных. NumPy, в отличие от pandas, не имеет встроенных средств для обработки NaN. Методы fillna() позволяют заполнять пропущенные значения различными способами (средним, медианой, константой и т.д.), а dropna() — удалять строки или столбцы, содержащие NaN.

df: pd.DataFrame = pd.DataFrame({'col1': [1, 2, np.nan], 'col2': [4, np.nan, 6]})

# Заполнение NaN средним значением по столбцу
df_filled: pd.DataFrame = df.fillna(df.mean())
print(df_filled)
#       col1  col2
# 0   1.0   4.0
# 1   2.0   5.0
# 2   1.5   6.0

# Удаление строк с NaN
df_dropped: pd.DataFrame = df.dropna()
print(df_dropped)
#     col1  col2
# 0   1.0   4.0

Группировка данных: функции groupby(), agg()

Функция groupby() позволяет группировать данные по одному или нескольким столбцам, а затем применять агрегирующие функции (например, sum(), mean(), count()) к каждой группе. NumPy не имеет встроенных аналогов для группировки данных.

data: dict = {'category': ['A', 'A', 'B', 'B', 'A'], 'value': [10, 20, 30, 40, 50]}
df: pd.DataFrame = pd.DataFrame(data)

# Группировка по столбцу 'category' и вычисление суммы значений
grouped: pd.DataFrame = df.groupby('category')['value'].sum()
print(grouped)
# category
# A    80
# B    70
# Name: value, dtype: int64

# Применение нескольких агрегирующих функций
grouped_agg: pd.DataFrame = df.groupby('category')['value'].agg(['sum', 'mean', 'count'])
print(grouped_agg)
#           sum  mean  count
# category                 
# A          80  26.67      3
# B          70  35.00      2

Объединение и слияние данных: merge(), concat(), join()

pandas предоставляет мощные инструменты для объединения и слияния DataFrame, аналогичные операциям JOIN в SQL. NumPy имеет ограниченные возможности для объединения массивов (например, concatenate()), но они не обладают гибкостью merge(), concat() и join().

df1: pd.DataFrame = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value1': [1, 2, 3, 4]})
df2: pd.DataFrame = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value2': [5, 6, 7, 8]})

# Слияние по столбцу 'key' (inner join по умолчанию)
df_merged: pd.DataFrame = pd.merge(df1, df2, on='key', how='inner')
print(df_merged)
#   key  value1  value2
# 0   B       2       5
# 1   D       4       6

# Конкатенация DataFrame по строкам
df_concat: pd.DataFrame = pd.concat([df1, df2], ignore_index=True)
print(df_concat)
#   key  value1  value2
# 0   A     1.0     NaN
# 1   B     2.0     NaN
# 2   C     3.0     NaN
# 3   D     4.0     NaN
# 4   B     NaN     5.0
# 5   D     NaN     6.0
# 6   E     NaN     7.0
# 7   F     NaN     8.0
Реклама

Функции pandas для анализа временных рядов, недоступные в NumPy

Работа с датами и временем: создание, преобразование, извлечение компонентов

pandas имеет встроенную поддержку для работы с датами и временем, включая создание объектов Timestamp, преобразование строк в даты, извлечение компонентов (год, месяц, день и т.д.) и выполнение операций с датами. NumPy не предоставляет таких удобных инструментов.

Временные сдвиги и лаги: shift()

Метод shift() позволяет сдвигать значения временного ряда вперед или назад во времени, что полезно для создания лагов и вычисления разностей.

Вычисление скользящих статистик: rolling()

Метод rolling() позволяет вычислять скользящие статистики (среднее, стандартное отклонение, сумму и т.д.) по заданному окну.

Изменение частоты временного ряда: resample()

Метод resample() позволяет изменять частоту временного ряда (например, переходить от дневных данных к месячным).

Функции ввода-вывода pandas, не имеющие аналогов в NumPy

Чтение данных из различных форматов: CSV, Excel, SQL, JSON

pandas предоставляет удобные функции для чтения данных из различных форматов, таких как CSV, Excel, SQL базы данных и JSON. NumPy требует ручной обработки для загрузки данных из этих форматов.

# Чтение данных из CSV файла
df: pd.DataFrame = pd.read_csv('data.csv')

# Чтение данных из Excel файла
df: pd.DataFrame = pd.read_excel('data.xlsx', sheet_name='Sheet1')

# Чтение данных из SQL базы данных
import sqlite3
conn = sqlite3.connect('database.db')
df: pd.DataFrame = pd.read_sql_query('SELECT * FROM table_name', conn)
conn.close()

Запись данных в различные форматы

Аналогично, pandas позволяет легко записывать данные в различные форматы.

Другие полезные функции pandas, которых нет в NumPy

Применение функций к данным: apply(), map(), applymap()

Методы apply(), map() и applymap() позволяют применять функции к элементам, строкам или столбцам DataFrame. Эти методы обеспечивают гибкий способ преобразования данных.

Категориальные данные: тип данных category и связанные функции

pandas имеет специальный тип данных category, который позволяет эффективно хранить и обрабатывать категориальные данные. NumPy не имеет встроенной поддержки категориальных данных.

Визуализация данных: базовые графики с использованием matplotlib

pandas интегрирован с библиотекой matplotlib и предоставляет удобные методы для построения базовых графиков непосредственно из DataFrame.

Заключение: Когда использовать pandas вместо NumPy и наоборот

Краткое сравнение pandas и NumPy: выбор инструмента для конкретной задачи

  • NumPy: Используйте NumPy для численных вычислений с однородными массивами, особенно когда требуется высокая производительность. NumPy идеально подходит для математических операций, линейной алгебры, преобразования Фурье и других задач, требующих интенсивных вычислений.
  • pandas: Используйте pandas для анализа и манипулирования табличными данными, обработки пропущенных значений, группировки данных, объединения таблиц и анализа временных рядов. pandas предоставляет удобный интерфейс для работы с гетерогенными данными и упрощает выполнение сложных аналитических задач.

Рекомендации по оптимизации производительности при работе с большими объемами данных

  • По возможности используйте векторизованные операции NumPy вместо итераций по элементам DataFrame.
  • Избегайте копирования DataFrame при выполнении операций.
  • Используйте правильные типы данных для экономии памяти.
  • При работе с очень большими файлами рассмотрите возможность использования chunksize при чтении данных.

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