Таблицы данных в языке Python: от простого к сложному
Основы работы с таблицами данных в Python
Табличные данные встречаются повсеместно: логи, финансовые отчёты, результаты экспериментов. Python предлагает несколько подходов для их обработки. Рассмотрим каждый.
Как быстро загрузить и обработать таблицу с помощью pandas?
Библиотека pandas - основной инструмент для работы с таблицами. Она предоставляет структуру DataFrame, которая имитирует электронную таблицу.
import pandas as pd
# Чтение CSV
df = pd.read_csv('data.csv')
print(df.head()) # первые 5 строкбиблиотека таблиц python (библиотека для работы с таблицами в python)
Пояснение: pd.read_csv загружает данные в DataFrame. Метод head() показывает начало таблицы.
sep=';'. Или кодировка: encoding='utf-8'.Как обработать таблицу без pandas, используя только встроенный модуль csv?
Если установка pandas невозможна, модуль csv позволяет читать и записывать CSV-файлы.
import csv
with open('data.csv', 'r') as f:
reader = csv.DictReader(f)
for row in reader:
print(row['Name'], row['Age'])Python вывести таблицу (вывод таблицы в python)
DictReader возвращает строки как словари. Можно использовать csv.reader для списков.
Как создать таблицу вручную в виде списка словарей?
Для простых случаев подходит список, каждый элемент которого - словарь с одинаковыми ключами.
data = [
{'Name': 'Anna', 'Age': 25, 'City': 'Moscow'},
{'Name': 'Bob', 'Age': 30, 'City': 'Spb'}
]
for person in data:
print(f"{person['Name']} - {person['Age']}")
таблица python задача (задача на таблицу в python)
Такая структура легко преобразуется в DataFrame: pd.DataFrame(data).
Как работать с Excel-файлами без pandas?
Библиотека openpyxl (для .xlsx) позволяет читать и редактировать ячейки.
from openpyxl import load_workbook
wb = load_workbook('report.xlsx')
ws = wb.active
for row in ws.iter_rows(values_only=True):
print(row)Python работа с таблицами (работа с таблицами в python)
Метод iter_rows возвращает строки как кортежи. Можно обращаться по индексу столбца.
data_only=True при загрузке.Как выполнить агрегацию данных (группировку) с pandas?
Метод groupby - основа для сводок.
df = pd.read_csv('sales.csv')
grouped = df.groupby('Category')['Revenue'].sum()
print(grouped)Python создание таблиц (создание таблиц в python)
Результат - Series с суммами по каждой категории. Для нескольких столбцов передайте список.
dropna=False.Как обрабатывать большие данные, не помещающиеся в оперативную память?
Pandas поддерживает чтение по частям (chunking).
chunk_iter = pd.read_csv('huge.csv', chunksize=10000)
for chunk in chunk_iter:
# обработать часть
print(chunk.shape)сортировка столбца python (сортировка столбца в python)
Каждый chunk - DataFrame, который можно обработать и сохранить результат.
Для численных массивов без меток столбцов удобен numpy. Массив двумерный можно считать таблицей, но с однородными типами.
import numpy as np
data = np.genfromtxt('numeric.csv', delimiter=',', skip_header=1)
print(data.mean(axis=0))genfromtxt игнорирует заголовок. Удобно для матричных операций.
Расширенные примеры работы с таблицами
Далее показаны менее очевидные, но мощные приёмы для pandas.
import pandas as pd
import numpy as np
# Создадим два набора данных для демонстрации
df1 = pd.DataFrame({'id': [1,2,3], 'name': ['A','B','C']})
df2 = pd.DataFrame({'id': [2,3,4], 'score': [90,85,70]})Как объединить две таблицы по ключу (merge)?
merged = pd.merge(df1, df2, on='id', how='inner')
print(merged)id name score 0 2 B 90 1 3 C 85
Внешние объединения (outer) сохраняют все id, заполняя пропуски.
left_on и right_on.Как построить сводную таблицу (pivot table)?
df = pd.DataFrame({
'Date': ['2024-01','2024-01','2024-02','2024-02'],
'Product': ['X','Y','X','Y'],
'Sales': [100,150,120,140]
})
pivot = df.pivot_table(index='Date', columns='Product', values='Sales', aggfunc='sum')
print(pivot)Product X Y Date 2024-01 100 150 2024-02 120 140
pivot_table автоматически заполняет пустые ячейки NaN.
Как применить свою функцию к каждой строке или столбцу?
df = pd.DataFrame({'a': [1,2], 'b': [3,4]})
df['sum'] = df.apply(lambda row: row['a'] + row['b'], axis=1)
print(df)a b sum 0 1 3 4 1 2 4 6
Для столбцов используйте axis=0 (по умолчанию).
apply медленнее векторизованных операций.Как выполнить несколько агрегаций одновременно?
df = pd.DataFrame({'group': ['A','A','B','B'], 'val': [1,2,3,4]})
result = df.groupby('group')['val'].agg(['sum', 'mean', 'std'])
print(result)sum mean std group A 3 1.5 0.707107 B 7 3.5 0.707107
Можно передавать именованные агрегации в виде словаря.
Как отфильтровать строки с помощью query (более читаемый синтаксис)?
df = pd.DataFrame({'x': [1,2,3,4], 'y': [10,20,30,40]})
filtered = df.query('x > 2 and y < 35')
print(filtered)x y 2 3 30
Имена столбцов внутри строки не нуждаются в кавычках.
Как объединить несколько операций в цепочку (pipe)?
def add_column(df):
df['z'] = df['x'] + df['y']
return df
def filter_positive(df):
return df[df['z'] > 0]
result = (df
.pipe(add_column)
.pipe(filter_positive))
print(result)x y z 0 1 10 11 1 2 20 22 2 3 30 33 3 4 40 44
pipe позволяет строить читаемые конвейеры.
Как работать с датами (парсинг, извлечение компонентов)?
df = pd.DataFrame({'date': ['2024-01-15', '2024-02-20']})
df['date'] = pd.to_datetime(df['date'])
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day_name'] = df['date'].dt.day_name()
print(df)date year month day_name 0 2024-01-15 2024 1 Monday 1 2024-02-20 2024 2 Tuesday
После преобразования доступны .dt-аксессоры.
format.