Современные способы анализа таблиц в Pandas

Раздел: Python -> Pandas

Основные операции с данными в Pandas

Как эффективно применять цепочки методов для обработки DataFrame?

Наиболее продуктивный подход - использование последовательных вызовов методов (method chaining). Это позволяет избежать создания множества промежуточных переменных и делает код лаконичным. Например, загрузка, удаление пропусков, группировка и вычисление среднего выполняются одной строкой:

import pandas as pd
df = (pd.read_csv('data.csv', encoding='utf-8')
      .dropna(subset=['price', 'quantity'])
      .groupby('category')
      .agg({'price': 'mean', 'quantity': 'sum'}))
print(df)

обработка больших данных python (обработка больших данных в python)

              price  quantity
category                   
A          12.5000       340
B          23.1000       210

очистка данных python (очистка данных в python)

Частая ошибка: при использовании цепочек легко потерять контроль над промежуточными данными. Если возникает ошибка, сложно определить, на каком этапе она произошла. Рекомендуется разбивать цепочку на части при отладке, а после проверки объединять.

Как загрузить данные из различных источников?

Pandas предоставляет единообразный интерфейс для чтения множества форматов. Для CSV используется pd.read_csv, для Excel - pd.read_excel, для баз данных SQL - pd.read_sql. Укажем параметры:

# Чтение CSV с разделителем точка с запятой и указанием кодировки
df_csv = pd.read_csv('data.csv', sep=';', encoding='cp1251')

# Чтение Excel с указанием листа
df_excel = pd.read_excel('data.xlsx', sheet_name='Sheet1', engine='openpyxl')

# Чтение из SQLite
import sqlite3
conn = sqlite3.connect('database.db')
df_sql = pd.read_sql('SELECT * FROM sales', conn)

Python подготовка данных (подготовка данных в python)

Типичные проблемы: кодировка CSV (cp1251, utf-8) - ошибка 'UnicodeDecodeError'. Решение - указать encoding='cp1251' или encoding='utf-8'. Для Excel больших файлов может потребоваться engine='openpyxl' или engine='xlrd'.

Как очистить данные от пропусков и дубликатов?

Пропуски обрабатываются методами dropna() (удаление строк с NaN) или fillna() (заполнение). Дубликаты удаляются drop_duplicates(). Выбор зависит от контекста.

df = pd.read_csv('data.csv')
# Удалить строки, где хотя бы одно значение отсутствует
df_clean = df.dropna()
# Заполнить пропуски в столбце 'age' медианным значением
df['age'] = df['age'].fillna(df['age'].median())
# Удалить полные дубликаты
df = df.drop_duplicates()

Python работа с большими данными (работа с большими данными в python)

Проблемы: при dropna() может быть удалено слишком много строк. Стоит использовать subset для указания конкретных столбцов. При fillna с постоянным значением данные могут искажаться - лучше использовать среднее или медиану.

Как отфильтровать строки по условиям?

Фильтрация выполняется с помощью булевой индексации: df[df['column'] > value]. Также можно использовать метод query() для более читаемого синтаксиса.

mask = (df['price'] > 100) & (df['quantity'] < 50)
filtered = df[mask]

# Альтернатива с query
filtered2 = df.query('price > 100 and quantity < 50')

генерация данных python (генерация данных в python)

Распространенная ошибка: путаница между логическими операторами & и and. В булевых массивах нужно использовать &, а not - ~. Для строковых условий в query кавычки внутри строки.

Как выполнить группировку и агрегацию нескольких столбцов?

Группировка осуществляется groupby(), после чего применяются агрегирующие функции. Для разных столбцов можно задать разные функции через словарь.

df_grouped = df.groupby('category').agg({
    'price': ['mean', 'std'],
    'quantity': 'sum'
})

Python код символа (код символа в python)

           price          quantity
            mean        std    sum
category                          
A         12.50  3.201562    340
B         23.10  4.876543    210

код из файла python (код из файла python)

Частая сложность: после группировки получается MultiIndex в столбцах. Для упрощения можно сбросить индексы .reset_index() или использовать .pivot_table().

Как объединить несколько датафреймов?

Для объединения по ключу применяется pd.merge(), а для простого склеивания - pd.concat().

df1 = pd.DataFrame({'key': [1,2,3], 'val1': ['a','b','c']})
df2 = pd.DataFrame({'key': [2,3,4], 'val2': ['x','y','z']})
merged = pd.merge(df1, df2, on='key', how='inner')
print(merged)

обработка данных на python (обработка данных на python)

   key val1 val2
0    2    b    x
1    3    c    y

Ошибки: при merge с несовпадающими типами ключа может возникнуть ошибка или пустой результат. Следует проверять типы столбцов перед слиянием. При concat с разными индексами может появиться дублирование индексов.

- Python как проверить строку (проверка строки в python)
- как работать с данными в python (работа с данными в python)
- Python наборы данных (наборы данных в python)

Расширенные примеры работы с данными в Pandas

Ниже приведены нестандартные и продвинутые сценарии использования Pandas.

Применение пользовательских функций с groupby

Для вычисления нестандартных агрегатов используется apply внутри groupby. Например, вычисление размаха (max - min) по группам.

Пример
import pandas as pd
import numpy as np
df = pd.DataFrame({'group': ['A','A','B','B','C'],
                   'value': [10, 20, 15, 25, 30]})
result = df.groupby('group')['value'].apply(lambda x: x.max() - x.min())
print(result)
group
A    10
B    10
C     0
Name: value, dtype: int64

Создание сводных таблиц с помощью pivot_table

Метод pivot_table позволяет строить многомерные сводки, аналогичные Excel.

Пример
df = pd.DataFrame({
    'region': ['North','South','North','South','East'],
    'product': ['A','A','B','B','A'],
    'sales': [100, 150, 200, 250, 300],
    'profit': [10, 20, 30, 40, 50]
})
pivot = df.pivot_table(values=['sales','profit'],
                       index='region',
                       columns='product',
                       aggfunc='sum',
                       fill_value=0)
print(pivot)
        sales      profit     
product     A    B      A    B
region                        
East      300    0     50    0
North     100  200     10   30
South     150  250     20   40

Работа с многоуровневыми индексами (MultiIndex)

При группировке по нескольким столбцам образуется MultiIndex. С ним можно работать, используя .xs() или .loc с кортежами.

Пример
df = pd.DataFrame({
    'city': ['NY','NY','LA','LA'],
    'year': [2020,2021,2020,2021],
    'pop': [8.4,8.5,3.9,3.95]
})
df_multi = df.set_index(['city','year']).sort_index()
print(df_multi.loc['NY'])
      pop
year     
2020  8.4
2021  8.5

Векторизованные операции с условиями через np.where

Для создания нового столбца на основе условия без цикла используется np.where.

Пример
df = pd.DataFrame({'price': [50, 150]})
df['price_category'] = np.where(df['price'] > 100, 'дорогой', 'дешевый')
print(df)
   price price_category
0     50        дешевый
1    150        дорогой

Применение оконных функций через groupby и transform

Для добавления агрегированных значений к каждой строке без изменения формы используется transform.

Пример
df = pd.DataFrame({'category': ['A','B','A','B'], 'price': [10,20,15,26]})
df['avg_price_by_cat'] = df.groupby('category')['price'].transform('mean')
print(df)
  category  price  avg_price_by_cat
0        A     10              12.5
1        B     20              23.0
2        A     15              12.5
3        B     26              23.0

Чтение больших файлов по частям (chunking)

При работе с файлами, не помещающимися в память, используется параметр chunksize, возвращающий итератор.

Пример
chunk_iter = pd.read_csv('huge_file.csv', chunksize=10000)
result = pd.DataFrame()
for chunk in chunk_iter:
    agg = chunk.groupby('user_id')['amount'].sum()
    result = result.add(agg, fill_value=0)
print(result.head())
user_id
1        12345.0
2         6789.0
Name: amount, dtype: float64

Использование parse_dates для автоматического преобразования дат

При чтении CSV можно указать столбцы с датами для парсинга.

Пример
df = pd.read_csv('sales.csv', parse_dates=['date'])
df['month'] = df['date'].dt.month
print(df.head())
   sales       date  month
0    100 2023-01-15      1
1    150 2023-02-20      2

Работа с данными в Python - comments

En
как работать с данными в python (python)