---
title: Pandas
seo:
  title: Pandas — Data Scientist
  description: "Тема «Pandas» для собеседования Data Scientist. Что быстрее для числового DataFrame: df**2 или df.apply(lambda x: x**2), и почему? Какая концепция эффективного Pandas? Как хорошо и красиво писать код на Pandas?"
---

[Все темы Data Scientist](/data-scientist)

## Что быстрее для числового DataFrame&#58; df\*\*2 или df.apply(lambda x&#58; x\*\*2), и почему? [#q-14bee738d69b81b8a1c3cdec0e893131]

Использование операции <code>df\*\*2</code> будет быстрее, чем <code>df&#46;apply&#40;lambda x&#58; x\*\*2&#41;</code>, потому что операция <code>df\*\*2</code> векторизована и выполняется нативно на массивах NumPy, в то время как <code>apply</code> применяет функцию к каждой строке или столбцу отдельно, что менее эффективно.

:::note[Ссылки для изучения]

1. [Модуль pandas](https://education.yandex.ru/handbook/python/article/modul-pandas)
   :::

---

## <strong>Какая концепция эффективного Pandas? Как хорошо и красиво писать код на Pandas?</strong> [#q-14bee738d69b8174a037c1897a346ead]

Концепция эффективного использования Pandas включает следующие аспекты&#58;

1. <strong>Векторизация операций</strong>&#58; Используйте встроенные методы
   Pandas для выполнения операций на всем DataFrame или Series одновременно,
   избегая явных циклов Python.

1. <strong>Использование методов работы с данными</strong>&#58; Вместо циклов
   Python используйте методы Pandas, такие как <code>apply&#40;&#41;</code>,
   <code>map&#40;&#41;</code>, <code>groupby&#40;&#41;</code> и др., для
   выполнения операций над данными более эффективно.

1. <strong>Оптимизация работы с памятью</strong>&#58; Используйте различные
   методы для уменьшения потребления памяти, такие как использование более
   компактных типов данных, удаление ненужных столбцов или строк и загрузка
   данных порциями при необходимости.

1. <strong>Использование индексации и селекции</strong>&#58; Используйте
   индексацию и селекцию для эффективного доступа к данным, избегая
   использования циклов и лишних операций копирования.

1. <strong>Применение эффективных алгоритмов</strong>&#58; Используйте
   оптимизированные алгоритмы Pandas для выполнения сложных операций, таких как
   слияние таблиц, объединение и группировка данных.

1. <strong>Обработка пропущенных данных</strong>&#58; Используйте методы Pandas
   для обработки пропущенных данных, такие как <code>fillna&#40;&#41;</code>,
   <code>dropna&#40;&#41;</code> и <code>interpolate&#40;&#41;</code>, чтобы
   гарантировать целостность и точность анализа.

1. <strong>Использование цепочек методов (method chaining)</strong>&#58;
   Используйте цепочки методов для создания более компактного и читаемого кода,
   избегая лишних промежуточных переменных.

:::note[Ссылки для изучения]

1. [Модуль pandas](https://education.yandex.ru/handbook/python/article/modul-pandas)
   :::

---

## <strong>Как работают в Pandas'е методы&#58;</strong> <code>assign</code><strong>,</strong> <code>pipe</code><strong>?</strong> [#q-14bee738d69b811bac0be9884e3d0f95]

Метод <code>assign&#40;&#41;</code> в Pandas используется для создания новых столбцов в DataFrame на основе существующих данных. Он принимает именованные аргументы в виде выражений или функций, которые определяют значения новых столбцов. Метод возвращает новый DataFrame с добавленными столбцами.

<strong>Например&#58;</strong>

```python
import pandas as pd

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df_new = df.assign(C=df['A'] + df['B'], D=lambda x: x['A'] * 2)
```

pipe() передаёт DataFrame одной функции вместе с дополнительными аргументами и возвращает её результат, который может иметь любой тип. Последовательность функций строят цепочкой вызовов .pipe(f).pipe(g).

<strong>Например&#58;</strong>

```python
import pandas as pd

def square_and_sum(df):
    df['A'] = df['A'] ** 2
    df['B'] = df['B'] ** 2
    return df.sum()

df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
result = df.pipe(square_and_sum)
```

:::note[Ссылки для изучения]

1. [Модуль pandas](https://education.yandex.ru/handbook/python/article/modul-pandas)
   :::

---

## <strong>Какой аналог</strong> <code>LEFT JOIN</code> <strong>в Pandas, если хотим пару DataFrame объединить?</strong> [#q-14bee738d69b81a5a5affeddbdf46b8e]

В Pandas аналогом операции LEFT JOIN является метод <code>merge&#40;&#41;</code>, который позволяет объединять два DataFrame по заданным ключам, сохраняя все строки из левого DataFrame и соответствующие строки из правого DataFrame, если ключи совпадают.

<strong>Например&#58;</strong>

```python
import pandas as pd

df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value': [1, 2, 3]})
df2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'value': [4, 5, 6]})

result = pd.merge(df1, df2, on='key', how='left')
```

В этом примере <code>df1</code> и <code>df2</code> объединяются по ключу <code>&#39;key&#39;</code>, и результатом будет DataFrame, содержащий все строки из <code>df1</code> и только соответствующие им строки из <code>df2</code>.

:::note[Ссылки для изучения]

1. [Модуль pandas](https://education.yandex.ru/handbook/python/article/modul-pandas)
   :::
