Что такое библиотека Pandas?

Ответ

Pandas — это высокоуровневая библиотека Python для анализа и обработки структурированных (табличных) данных. Её основная сила — в работе с помеченными данными, подобно таблицам в SQL или Excel, но с мощью программирования.

Ключевые структуры данных:

  • Series: Одномерный помеченный массив. Похож на столбец таблицы или словарь.
  • DataFrame: Двумерная, гетерогенная таблица с помеченными строками и столбцами. Это основная рабочая лошадка.

Основные возможности, которые я постоянно использую:

  1. Чтение и запись данных из множества источников:
    df = pd.read_csv('data.csv')
    df.to_excel('output.xlsx', sheet_name='Results')
  2. Инспекция и очистка данных:
    df.info()        # Типы данных и пропуски
    df.describe()    # Статистика
    df.isnull().sum() # Количество пропусков
    df.dropna()      # Удаление строк с NaN
    df.fillna(0)     # Заполнение пропусков
  3. Выборка и фильтрация:

    # Выбор столбцов
    df[['name', 'age']]
    
    # Фильтрация по условию (синтаксис, похожий на SQL WHERE)
    adults = df[df['age'] >= 18]
    
    # Сложные условия
    filtered = df[(df['department'] == 'IT') & (df['salary'] > 100000)]
  4. Группировка и агрегация (аналог GROUP BY в SQL):

    # Средняя зарплата по отделам
    df.groupby('department')['salary'].mean()
    
    # Несколько агрегаций
    df.groupby('department').agg({'salary': ['mean', 'min', 'max'], 'age': 'median'})
  5. Работа с временными рядами (мощная встроенная поддержка дат и времени).

Сильные стороны: Невероятно выразительный и продуктивный синтаксис для операций с данными, отличная интеграция с экосистемой Python (NumPy, Matplotlib, Scikit-learn). Ограничения: Для очень больших данных (не помещающихся в оперативную память) лучше смотреть в сторону Dask или Vaex. Нативные операции Pandas не всегда эффективно параллелизуются.

Ответ 18+ 🔞

Ну, смотри, вот есть такая библиотека Pandas. Если по-простому, это как Excel на стероидах, только для программистов. Вся её фишка — ковыряться в табличных данных, но так, чтобы всё было удобно и под рукой. Не надо писать километры кода, чтобы посчитать среднюю зарплату по отделам, тут всё уже придумано.

Основные штуки, с которыми работаешь:

  • Series: Это просто столбец из таблицы. Одна колонка с данными и подписями.
  • DataFrame: А вот это уже и есть сама таблица, целиком. Двумерная, с рядами и колонками. Это твоя основная рабочая лошадка, с ней и будешь 99% времени возиться.

Что она умеет делать, и что я постоянно юзаю:

  1. Загрузить и выгрузить данные откуда угодно и куда угодно. CSV, Excel, SQL — ей всё похуй, она съест:
    df = pd.read_csv('data.csv') # Загрузил из файла
    df.to_excel('output.xlsx', sheet_name='Results') # Выплюнул в эксель
  2. Посмотреть, что за данные и почистить их. Часто данные приходят кривые, с дырами. Тут надо понять, что к чему:
    df.info()        # Быстро глянуть, какие типы данных и нет ли пропусков
    df.describe()    # Базовая статистика: среднее, минимум, максимум — очень помогает
    df.isnull().sum() # Считает, сколько в каждой колонке пропусков (NaN). Иногда цифры овердохуища, и волнение ебать начинается.
    df.dropna()      # Просто выкинуть строки, где есть пропуски. Жестко, но иногда надо.
    df.fillna(0)     # Или заполнить эти дыры нулями (или средним значением).
  3. Выбрать нужные куски данных и отфильтровать. Тут синтаксис почти как в SQL, только проще:

    # Выбрать только две колонки
    df[['name', 'age']]
    
    # Отфильтровать только взрослых (возраст >= 18). Удобно, ёпта.
    adults = df[df['age'] >= 18]
    
    # А можно и сложное условие запилить. Например, из IT-отдела с зарплатой за сотку.
    filtered = df[(df['department'] == 'IT') & (df['salary'] > 100000)]
  4. Группировка и сводные таблицы — это вообще пизда рулю. Полный аналог GROUP BY из SQL, но в одну строчку:

    # Средняя зарплата по каждому отделу. Всё, задача решена.
    df.groupby('department')['salary'].mean()
    
    # А можно сразу кучу статистик насобирать: средняя, минимальная, максимальная зарплата и медианный возраст.
    df.groupby('department').agg({'salary': ['mean', 'min', 'max'], 'age': 'median'})
  5. Работа с датами и временем у них сделана просто отлично. Не надо самому парсить строки, всё уже есть.

В чём сила: Синтаксис просто бомбический, пишешь мало, а делает много. Идеально впишется в твой стек, если работаешь с NumPy, Matplotlib или Scikit-learn. А где слабо: Если данные такие огромные, что в оперативку не влезают, тут уже начинаются танцы с бубном. Pandas жрёт память как не в себя. Для таких случаев есть Dask или Vaex. И ещё — она не очень-то умеет распараллеливать задачи на несколько ядер, так что на особо жирных данных может тупить.