Pandas: DataFrame и Series

Обзор структур данных DataFrame и Series в Pandas, их основные характеристики и преимущества

Pandas — это библиотека Python, предназначенная для обработки и анализа данных. Два основных объекта, которые предоставляет Pandas для хранения данных, — это DataFrame и Series.

Series

Определение: Series — это одномерный маркированный массив, который может содержать данные любого типа (целые числа, строки, вещественные числа, объекты Python и так далее). Он похож на столбец в таблице или на список в Python.

Создание Series

import pandas as pd

# Из списка
s = pd.Series([1, 3, 5, 7, 9])
print(s)

# 0    1
# 1    3
# 2    5
# 3    7
# 4    9
# dtype: int64

Основные атрибуты Series

  • s.values: Массив значений Series. Возвращает NumPy массив.
s = pd.Series([1, 2, 3])
print(s.values)  # [1 2 3]
  • s.index: Индексы Series. Может содержать числа, строки или даты.
s = pd.Series([1, 2, 3])
print(s.index)  # RangeIndex(start=0, stop=3, step=1)
  • s.dtype: Тип данных элементов Series. Возвращает, например, int64, float64, object (для строк).
s = pd.Series([1, 2, 3])
print(s.dtype)  # int64
  • s.shape: Форма Series, которая показывает количество элементов.
s = pd.Series([1, 2, 3])
print(s.shape)  # (3,)
  • s.size: Общее количество элементов в Series.
s = pd.Series([1, 2, 3])
print(s.size)  # 3
  • s.name: Имя Series. Может быть полезным, когда Series становится столбцом DataFrame.
s = pd.Series([1, 2, 3])
s.name = "Numbers"
print(s.name)  # Numbers

Индексация и выборка данных

print(s[2])      # выбор элемента по индексу
print(s[1:4])    # срез данных

DataFrame

DataFrame — это двумерная таблица с метками на строках и столбцах. Его можно представить как набор объектов Series, где каждый Series — это столбец.

Создание DataFrame

import pandas as pd

# Из словаря
data = {
    "Name": ["Anna", "Bob", "Charlie"],
    "Age": [25, 30, 35]
}
df = pd.DataFrame(data)
print(df)

#       Name  Age
# 0     Anna   25
# 1      Bob   30
# 2  Charlie   35

Основные атрибуты DataFrame

  • df.values: Массив значений DataFrame. Возвращает двумерный NumPy массив.
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
print(df.values)

# [[1 3]
#  [2 4]]
  • df.index: Индексы строк DataFrame.
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
print(df.index)  # RangeIndex(start=0, stop=2, step=1)
  • df.columns: Индексы столбцов DataFrame.
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
print(df.columns)  # Index(['A', 'B'], dtype='object')
  • df.dtypes: Типы данных столбцов DataFrame. Возвращает Series, где индексами являются названия столбцов, а значениями — типы данных.
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
print(df.dtypes)
# A    int64
# B    int64
# dtype: object
  • df.shape: Форма DataFrame, показывающая количество строк и столбцов.
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
print(df.shape)  # (2, 2)
  • df.size: Общее количество элементов в DataFrame.
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
print(df.size)  # 4
  • df.T: Транспонирование DataFrame (меняет строки и столбцы местами).
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
print(df.T)

#    0  1
# A  1  2
# B  3  4
  • df.info(): Метод, который предоставляет краткий обзор данных в DataFrame, включая количество ненулевых значений и типы данных.
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df.info()

# <class 'pandas.core.frame.DataFrame'>
# RangeIndex: 2 entries, 0 to 1
# Data columns (total 2 columns):
#  #   Column  Non-Null Count  Dtype
# ---  ------  --------------  -----
#  0   A       2 non-null      int64
#  1   B       2 non-null      int64
# dtypes: int64(2)
# memory usage: 160.0 bytes

Индексация и выборка данных

import pandas as pd

data = {
    "Name": ["Anna", "Bob", "Charlie"],
    "Age": [25, 30, 35]
}
df = pd.DataFrame(data)

print(df['Name'])        # выбор столбца по имени
print(df.iloc[0])        # выбор строки по индексу
print(df.loc[0, 'Name']) # выбор элемента по индексу строки и имени столбца

Добавление и удаление данных

import pandas as pd

data = {
    "Name": ["Anna", "Bob", "Charlie"],
    "Age": [25, 30, 35]
}
df = pd.DataFrame(data)

# Добавление столбца
df['City'] = ['Moscow', 'Paris', 'London']

# Удаление столбца
df.drop('Age', axis=1, inplace=True)

Взаимодействие между DataFrame и Series

Когда вы выбираете столбец из DataFrame, вы работаете с объектом Series:

import pandas as pd

data = {
    "Name": ["Anna", "Bob", "Charlie"],
    "Age": [25, 30, 35]
}
df = pd.DataFrame(data)

age_series = df['Age']
print(type(age_series))  # <class 'pandas.core.series.Series'>

Элементы Series сохраняют свои индексы, что позволяет легко взаимодействовать с DataFrame:

import pandas as pd

data = {
    "Name": ["Anna", "Bob", "Charlie"],
    "Age": [25, 30, 35]
}
df = pd.DataFrame(data)

age_series = df['Age']
df['Age'] = age_series * 2  # удвоим возраст

Основные характеристики и преимущества DataFrame и Series

Series

Основные характеристики:

  1. Одномерность: Series представляет собой одномерный массив данных.
  2. Гомогенность: Все элементы Series должны быть одного типа.
  3. Маркированный массив: У каждого элемента в Series есть уникальный индекс, который может быть явно задан или автоматически сгенерирован.

Преимущества:

  1. Простота: Отлично подходит для представления временных рядов или любых других одномерных данных.
  2. Эффективность: Быстрые операции чтения/записи благодаря индексации.
  3. Функциональность: Поддержка большого числа методов для базовых операций (например, .mean(), .sum() и др.).
  4. Гибкость индексации: Позволяет использовать числовые, строковые или даже временные индексы.

DataFrame

Основные характеристики:

  1. Двумерность: DataFrame — это таблица с метками на строках и столбцах.
  2. Гетерогенность: Разные столбцы могут содержать разные типы данных (например, числа, строки).
  3. Структурированность: У каждого столбца есть имя, и все столбцы имеют одинаковое количество строк.
  4. Маркированный массив: И строки, и столбцы могут иметь индексы.

Преимущества:

  1. Гибкость: Поддержка различных типов данных в разных столбцах.
  2. Эффективность: Быстрые операции на уровне столбцов благодаря оптимизации под капотом с использованием библиотеки NumPy.
  3. Работа с пропущенными данными: Удобные методы для обработки пропущенных значений, такие как .fillna() или .dropna().
  4. Обширный функционал: Включает в себя множество методов для различных операций, в том числе группировки, агрегации, слияния и др.
  5. Взаимодействие с другими источниками данных: Удобное чтение из и запись в различные форматы данных, такие как CSV, Excel, SQL и др.

Заключение

Series и DataFrame — это фундаментальные структуры данных в библиотеке Pandas, с которыми вы будете работать почти всегда при анализе данных. Освоив их, вы сможете с легкостью обрабатывать, анализировать и визуализировать данные, не углубляясь в сложные детали реализации.

Содержание: