Эффективные приемы работы с библиотекой Pandas в Python

Раздел: Анализ данных -> Библиотеки данных

Основные примеры использования Pandas

Базовый пример: создание DataFrame и первичный анализ

import pandas as pd
df = pd.DataFrame({'Name': ['Alice','Bob','Charlie'], 'Age': [25,30,35], 'Salary': [50000,60000,70000]})
print(df.head())
print(df.info())
print(df.describe())

Python pandas пример (примеры pandas в python)

      Name  Age  Salary
0    Alice   25   50000
1      Bob   30   60000
2  Charlie   35   70000


RangeIndex: 3 entries, 0 to 2
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   Name    3 non-null      object
 1   Age     3 non-null      int64
 2   Salary  3 non-null      int64
dtypes: int64(2), object(1)
memory usage: 200.0 bytes

          Age        Salary
count   3.0     3.000000
mean   30.0  6000.000000
std     5.0  1000.000000
min    25.0  5000.000000
25%    27.5  5500.000000
50%    30.0  6000.000000
75%    32.5  6500.000000
max    35.0  7000.000000

Python excel примеры (примеры работы с excel в python)

Данный код создает DataFrame, выводит первые строки, информацию о типах данных и описательную статистику. Это стандартный набор операций для начала работы с любым набором данных.

Проблема: если в данных есть пропуски, describe() не учитывает их по умолчанию. Для корректной статистики используйте параметр include='all'. Также info() может не отобразить все типы при больших данных - используйте df.dtypes.

Как выбрать строки и столбцы с помощью loc и iloc?

# loc - по меткам, iloc - по позициям
print(df.loc[1, 'Name'])  # Bob
print(df.iloc[0, 2])      # 50000
subset = df.loc[0:2, ['Name','Salary']]
print(subset)

графики python примеры (построение графиков в python)

Bob
50000
      Name  Salary
0    Alice   50000
1      Bob   60000
2  Charlie   70000

loc использует названия строк и столбцов, iloc - целочисленные индексы. При slicing с loc конечная метка включается, с iloc - нет (как в Python).

Ошибка: если метка индекса не уникальна, loc вернет все строки с такой меткой. Рекомендуется сбросить индекс reset_index().

Как выполнить группировку данных с groupby?

# средняя зарплата по возрасту
df['Age_group'] = pd.cut(df['Age'], bins=[0,30,40], labels=['young','middle'])
grouped = df.groupby('Age_group')['Salary'].mean()
print(grouped)
Age_group
young    55000.0
middle   70000.0
Name: Salary, dtype: float64

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

Проблема: если в группе есть NaN, агрегация может вернуть NaN. Решение: использовать dropna=False или заполнить пропуски перед группировкой.

Как отсортировать DataFrame по столбцам?

sorted_df = df.sort_values(by=['Age', 'Salary'], ascending=[True, False])
print(sorted_df)
      Name  Age  Salary Age_group
0    Alice   25   50000    young
1      Bob   30   60000    young
2  Charlie   35   70000   middle

sort_values сортирует по указанным столбцам. ascending задает порядок для каждого столбца. Для сортировки по индексу используется sort_index.

Ошибка: при сортировке по столбцу с пропусками NaN помещаются в конец (по умолчанию). Можно изменить параметром na_position.

Как добавить новый столбец на основе условия?

df['Is_adult'] = df['Age'].apply(lambda x: x >= 18)
print(df)
      Name  Age  Salary Age_group  Is_adult
0    Alice   25   50000    young      True
1      Bob   30   60000    young      True
2  Charlie   35   70000   middle      True

Метод apply применяет функцию к каждому элементу серии. Для простых условий лучше использовать векторизованные операции: df['Is_adult'] = df['Age'] >= 18.

Проблема: apply может быть медленным. Для булевых условий используйте прямое сравнение. Для сложных функций используйте numpy.where или np.select.

Как удалить дубликаты строк?

df_dup = pd.DataFrame({'A': [1,1,2,2], 'B': [5,5,6,7]})
df_unique = df_dup.drop_duplicates(subset=['A'], keep='first')
print(df_unique)
   A  B
0  1  5
2  2  6

drop_duplicates удаляет повторяющиеся строки. subset указывает столбцы для проверки уникальности. keep='first'/'last'/'False'. inplace=True изменяет оригинал.

Ошибка: если не указать subset, удаляются строки, полностью идентичные. Часто требуется учитывать только ключевые столбцы. Проверяйте, что считаете дубликатом.

Расширенные и редкие возможности Pandas

Пример
# Пример 1: создание сводной таблицы (pivot_table)
import pandas as pd
df = pd.DataFrame({'A':['x','x','y','y'], 'B':['p','q','p','q'], 'C':[1,2,3,4]})
pivot = df.pivot_table(values='C', index='A', columns='B', aggfunc='sum')
print(pivot)
B    p  q
A      
x   1  2
y   3  4

pivot_table позволяет создавать таблицы с агрегированными данными, аналогично Excel. Можно использовать несколько функций aggfunc, заполнение пропусков fill_value.

Пример
# Пример 2: преобразование широкой таблицы в длинную (melt)
wide = pd.DataFrame({'id':[1,2], 'math':[90,80], 'eng':[85,95]})
long = pd.melt(wide, id_vars=['id'], var_name='subject', value_name='score')
print(long)
   id subject  score
0   1    math     90
1   2    math     80
2   1     eng     85
3   2     eng     95

melt - обратная операция к pivot. Полезна для перевода данных в формат, удобный для анализа (tidy data).

Пример
# Пример 3: использование applymap для преобразования всех элементов
df_nums = pd.DataFrame({'a':[1,2], 'b':[3,4]})
df_sq = df_nums.applymap(lambda x: x**2)
print(df_sq)
   a   b
0  1   9
1  4  16

applymap применяет функцию к каждому элементу DataFrame. Для серий используйте map (не apply).

В Pandas 2.1 applymap устарел, используйте map на DataFrame (df.map).
Пример
# Пример 4: работа с датами
dates = pd.to_datetime(['2023-01-15', '2024-02-20'])
df_dates = pd.DataFrame({'date': dates, 'value': [100,200]})
df_dates['year'] = df_dates['date'].dt.year
df_dates['month'] = df_dates['date'].dt.month
df_dates['day_of_week'] = df_dates['date'].dt.day_name()
print(df_dates)
       date  value  year  month day_of_week
0 2023-01-15    100  2023      1      Sunday
1 2024-02-20    200  2024      2     Tuesday

pd.to_datetime преобразует строки в datetime64. После этого через .dt доступны компоненты даты.

Пример
# Пример 5: фильтрация с помощью query
df = pd.DataFrame({'name':['Alice','Bob','Charlie'], 'age':[25,30,35], 'salary':[50000,60000,70000]})
result = df.query('age > 28 and salary > 55000')
print(result)
      name  age  salary
1      Bob   30   60000
2  Charlie   35   70000

query позволяет фильтровать строки с помощью строкового выражения, более читаемого для сложных условий. Обратите внимание на имена столбцов без кавычек.

Примеры Pandas в Python - comments

En
Python pandas пример (python)