Эффективная работа с таблицами данных в Python

Раздел: Обработка данных -> Таблицы

Работа с таблицами в Python: методы и инструменты

Основное решение: библиотека pandas

Библиотека pandas предоставляет наиболее мощный и удобный инструмент для обработки табличных данных. Основная структура - DataFrame, двумерная таблица с метками строк и столбцов.

Пример базового создания DataFrame из словаря:

import pandas as pd

data = {
    'Имя': ['Анна', 'Борис', 'Виктор'],
    'Возраст': [25, 30, 35],
    'Зарплата': [60000, 70000, 80000]
}
df = pd.DataFrame(data)
print(df)

библиотека таблиц python (библиотека для работы с таблицами в python)

      Имя  Возраст  Зарплата
0    Анна      25     60000
1   Борис      30     70000
2  Виктор      35     80000

Python вывести таблицу (вывод таблицы в python)

Основные методы для быстрого ознакомления с таблицей:

print(df.head(2))       # первые 2 строки
print(df.info())        # информация о типах и пропусках
print(df.describe())    # статистика по числовым столбцам
print(df['Возраст'].mean())  # среднее значение

таблица python задача (задача на таблицу в python)

Фильтрация данных:

# Выбрать строки, где возраст больше 28
filtered = df[df['Возраст'] > 28]
print(filtered)

Python работа с таблицами (работа с таблицами в python)

      Имя  Возраст  Зарплата
1   Борис      30     70000
2  Виктор      35     80000

Python создание таблиц (создание таблиц в python)

Группировка и агрегация:

# Сгруппировать по возрасту (гипотетически) и посчитать среднюю зарплату
df['Категория'] = ['Молодой', 'Средний', 'Средний']
grouped = df.groupby('Категория')['Зарплата'].mean()
print(grouped)

сортировка столбца python (сортировка столбца в python)

Категория
Молодой    60000.0
Средний    75000.0
Name: Зарплата, dtype: float64

Python столбец таблицы (столбец таблицы в python)

Сортировка:

sorted_df = df.sort_values('Зарплата', ascending=False)
print(sorted_df)

Python 3 таблица (таблица в python 3)

      Имя  Возраст  Зарплата Категория
2  Виктор      35     80000   Средний
1   Борис      30     70000   Средний
0    Анна      25     60000  Молодой

язык программирования python таблица (таблица в языке python)

Объединение таблиц (merge):

df2 = pd.DataFrame({'Имя': ['Анна', 'Борис'], 'Город': ['Москва', 'СПб']})
merged = pd.merge(df, df2, on='Имя', how='left')
print(merged)

Python таблица ввода (таблица ввода в python)

      Имя  Возраст  Зарплата Категория  Город
0    Анна      25     60000  Молодой  Москва
1   Борис      30     70000   Средний    СПб
2  Виктор      35     80000   Средний    NaN

Python таблица данных (таблица данных в python)

Типичные ошибки:

  • Попытка обратиться к несуществующему столбцу вызывает KeyError.
  • При чтении CSV не указан разделитель (delimiter) - данные сливаются в одну строку.
  • Изменение копии среза вместо оригинального DataFrame (SettingWithCopyWarning).

Решение: использовать .copy() для явного копирования, проверять названия столбцов через df.columns, указывать sep при чтении.

Как работать с таблицей без внешних библиотек?

Используйте встроенные структуры: список списков или список словарей. Подходит для небольших данных.

Пример на списках:

table = [
    ['Анна', 25, 60000],
    ['Борис', 30, 70000],
    ['Виктор', 35, 80000]
]
# Получить столбец 'Возраст'
ages = [row[1] for row in table]
print(ages)
# Средний возраст
avg_age = sum(ages) / len(ages)
print(avg_age)

Python таблица значений (таблица значений в python)

[25, 30, 35]
30.0

Python таблица переменных (таблица переменных в python)

Пример на списке словарей:

table_dict = [
    {'Имя': 'Анна', 'Возраст': 25, 'Зарплата': 60000},
    {'Имя': 'Борис', 'Возраст': 30, 'Зарплата': 70000},
    {'Имя': 'Виктор', 'Возраст': 35, 'Зарплата': 80000}
]
# Фильтрация: зарплата > 65000
high_salary = [row for row in table_dict if row['Зарплата'] > 65000]
print(high_salary)

Python таблица функций (таблица функций в python)

[{'Имя': 'Борис', 'Возраст': 30, 'Зарплата': 70000}, {'Имя': 'Виктор', 'Возраст': 35, 'Зарплата': 80000}]

ячейки таблицы python (ячейки таблицы в python)

Проблемы: неэффективно для больших объёмов, нет встроенных методов группировки, сортировки, требуется ручное написание циклов.

Решение: для объёмов более 10-20 тыс. строк лучше перейти на pandas.

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

Библиотека numpy позволяет создавать многомерные массивы и выполнять быстрые векторные операции.

import numpy as np

# Создать таблицу 3x3
arr = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
print(arr)
# Статистика
print('Среднее по столбцам:', arr.mean(axis=0))
print('Сумма по строкам:', arr.sum(axis=1))
# Математические операции
doubled = arr * 2
print(doubled)
[[1 2 3]
 [4 5 6]
 [7 8 9]]
Среднее по столбцам: [4. 5. 6.]
Сумма по строкам: [ 6 15 24]
[[ 2  4  6]
 [ 8 10 12]
 [14 16 18]]

Ошибки: попытка смешивать типы данных (числа и строки) - массив будет иметь тип object, теряется скорость. Размерности не совпадают при операциях.

Решение: использовать dtype для контроля типа, проверять shape массивов.

Как обрабатывать большие таблицы быстрее?

Библиотека polars - современная альтернатива pandas, написанная на Rust, с ленивыми вычислениями.

import polars as pl

df = pl.DataFrame({
    'Имя': ['Анна', 'Борис', 'Виктор'],
    'Возраст': [25, 30, 35],
    'Зарплата': [60000, 70000, 80000]
})
print(df)
# Фильтрация и группировка
result = df.filter(pl.col('Возраст') > 28).groupby('Имя').agg(pl.mean('Зарплата'))
print(result)
shape: (2, 2)
┌────────┬────────────┐
│ Имя    ┆ Зарплата   │
│ ---    ┆ ---        │
│ str    ┆ f64        │
╞════════╪════════════╡
│ Борис  ┆ 70000.0    │
├────────┼────────────┤
│ Виктор ┆ 80000.0    │
└────────┴────────────┘

Проблемы: синтаксис отличается от pandas, меньше сообщество, меньше готовых решений.

Решение: начать с pandas, а при необходимости ускорения переходить на polars, используя polars.lazy() для оптимизации.

Как читать и записывать таблицы Excel?

Библиотека openpyxl для работы с файлами .xlsx (чтение/запись).

import openpyxl

# Создание книги
wb = openpyxl.Workbook()
ws = wb.active
ws.title = 'Пример'
ws.append(['Имя', 'Возраст', 'Зарплата'])
ws.append(['Анна', 25, 60000])
ws.append(['Борис', 30, 70000])
wb.save('example.xlsx')

# Чтение
wb2 = openpyxl.load_workbook('example.xlsx')
ws2 = wb2.active
for row in ws2.iter_rows(values_only=True):
    print(row)
('Имя', 'Возраст', 'Зарплата')
('Анна', 25, 60000)
('Борис', 30, 70000)

Ошибки: файл открыт в другой программе, формат .xls не поддерживается (нужен xlrd).

Решение: закрыть файл перед записью, для старых форматов использовать xlrd или пересохранить в .xlsx.

Как работать с таблицами через SQL запросы?

Библиотека sqlite3 позволяет создавать реляционные таблицы и выполнять SQL.

import sqlite3

conn = sqlite3.connect(':memory:')
c = conn.cursor()
c.execute('CREATE TABLE employees (name TEXT, age INT, salary INT)')
c.execute('INSERT INTO employees VALUES (?,?,?)', ('Анна', 25, 60000))
c.execute('INSERT INTO employees VALUES (?,?,?)', ('Борис', 30, 70000))
c.execute('SELECT * FROM employees WHERE salary > 65000')
print(c.fetchall())
conn.close()
[('Борис', 30, 70000)]

Проблемы: необходимо знание SQL, нет встроенной визуализации.

Решение: использовать для больших объёмов или при интеграции с базами данных.

Как легко конвертировать таблицы между форматами?

Библиотека tablib поддерживает импорт/экспорт в CSV, JSON, Excel, YAML и другие.

import tablib

headers = ['Имя', 'Возраст']
data = [
    ['Анна', 25],
    ['Борис', 30]
]

dataset = tablib.Dataset(*data, headers=headers)
print(dataset.csv)
print(dataset.json)
Имя,Возраст
Анна,25
Борис,30

[{"Имя": "Анна", "Возраст": 25}, {"Имя": "Борис", "Возраст": 30}]

Ошибки: отсутствие поддержки сложных типов (дата, время).

Решение: сначала преобразовать данные к строкам или использовать pandas для сложных форматов.

Расширенные примеры обработки таблиц

Ниже приведены продвинутые сценарии работы с табличными данными с использованием pandas.

Многомерная группировка и агрегация с agg()

Пример
import pandas as pd
import numpy as np

df = pd.DataFrame({
    'Группа': ['A', 'A', 'B', 'B', 'A'],
    'Тип': ['X', 'Y', 'X', 'Y', 'X'],
    'Значение1': [10, 20, 30, 40, 50],
    'Значение2': [1, 2, 3, 4, 5]
})
# Несколько агрегирующих функций для разных столбцов
agg_result = df.groupby(['Группа', 'Тип']).agg({
    'Значение1': ['sum', 'mean'],
    'Значение2': 'max'
})
print(agg_result)
              Значение1      Значение2
                   sum mean        max
Группа Тип
A      X            60  30.0          5
       Y            20  20.0          2
B      X            30  30.0          3
       Y            40  40.0          4

Создание сводной таблицы (pivot_table)

Пример
pivot = df.pivot_table(
    values='Значение1',
    index='Группа',
    columns='Тип',
    aggfunc='sum',
    fill_value=0
)
print(pivot)
Тип      X   Y
Группа
A       60  20
B       30  40

Применение пользовательской функции к строкам (apply с axis=1)

Пример
# Функция для расчета бонуса: если Значение1 > 30, то бонус 10% от Значение1
# Для каждой строки
df['Бонус'] = df.apply(lambda row: row['Значение1'] * 0.1 if row['Значение1'] > 30 else 0, axis=1)
print(df)
  Группа Тип  Значение1  Значение2  Бонус
0     A   X         10          1    0.0
1     A   Y         20          2    0.0
2     B   X         30          3    0.0
3     B   Y         40          4    4.0
4     A   X         50          5    5.0

Работа с датами: преобразование и выделение компонент

Пример
dates = pd.date_range('2023-01-01', periods=5, freq='D')
df_dates = pd.DataFrame({'Дата': dates, 'Продажи': [100, 200, 150, 300, 250]})
df_dates['Год'] = df_dates['Дата'].dt.year
df_dates['Месяц'] = df_dates['Дата'].dt.month
df_dates['День_недели'] = df_dates['Дата'].dt.day_name()
print(df_dates)
       Дата  Продажи  Год  Месяц День_недели
0 2023-01-01      100 2023      1    Sunday
1 2023-01-02      200 2023      1    Monday
2 2023-01-03      150 2023      1   Tuesday
3 2023-01-04      300 2023      1 Wednesday
4 2023-01-05      250 2023      1  Thursday

Объединение нескольких DataFrame (concat)

Пример
df1 = pd.DataFrame({'A': [1,2], 'B': [3,4]})
df2 = pd.DataFrame({'A': [5,6], 'B': [7,8]})
# Вертикальное объединение
concat_df = pd.concat([df1, df2], ignore_index=True)
print(concat_df)
   A  B
0  1  3
1  2  4
2  5  7
3  6  8

Чтение большого CSV файла по частям (chunksize)

Пример
# Предположим, есть файл 'large.csv'
# Чтение по 1000 строк
chunk_iter = pd.read_csv('large.csv', chunksize=1000)
total = 0
for chunk in chunk_iter:
    total += chunk['Столбец'].sum()
print('Сумма:', total)
Сумма: 1234567 (пример)

Использование 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

Работа с пропущенными значениями

Пример
df_nan = pd.DataFrame({'A': [1, None, 3], 'B': [None, 5, 6]})
print('Исходный:')
print(df_nan)
# Удалить строки с любым NaN
print('После dropna:')
print(df_nan.dropna())
# Заполнить NaN
print('После fillna:')
print(df_nan.fillna({'A': 0, 'B': -1}))
Исходный:
     A    B
0  1.0  NaN
1  NaN  5.0
2  3.0  6.0
После dropna:
     A    B
2  3.0  6.0
После fillna:
     A    B
0  1.0 -1.0
1  0.0  5.0
2  3.0  6.0

Преобразование типов данных

Пример
df_types = pd.DataFrame({'Цена': ['100', '200.5', '300'], 'Количество': ['1', '2', '3']})
df_types['Цена'] = pd.to_numeric(df_types['Цена'], errors='coerce')
df_types['Количество'] = df_types['Количество'].astype(int)
print(df_types.dtypes)
print(df_types)
Цена        float64
Количество     int32
dtype: object
     Цена  Количество
0  100.0           1
1  200.5           2
2  300.0           3

Таблица функций в Python - comments

En
Python таблица функций (python)