Современные способы анализа таблиц в 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 с разными индексами может появиться дублирование индексов.
Расширенные примеры работы с данными в 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