Табличные вычисления в Python: задача на анализ успеваемости

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

Цель задачи и основные подходы

Рассматривается типичная учебная задача: имеется файл students.csv с колонками Имя, Оценка1, Оценка2, Оценка3. Требуется вычислить среднюю оценку каждого студента и общий средний балл по всем оценкам, после чего вывести результаты в порядке убывания средней оценки. Ниже представлены различные способы решения с использованием разных библиотек и подходов.

Как эффективно решить задачу с помощью pandas?

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


import pandas as pd

df = pd.read_csv('students.csv')
df['Средняя'] = df[['Оценка1','Оценка2','Оценка3']].mean(axis=1)
result = df[['Имя','Средняя']].sort_values('Средняя', ascending=False)
print(result)
print('Общий средний балл:', df['Средняя'].mean())
  

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

       Имя    Средняя
3    Иван    4.666667
1    Мария   4.333333
0    Петр    3.666667
2    Анна    3.333333
Общий средний балл: 4.0
  

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

Возможные проблемы:

  • Файл не найден (проверьте путь).
  • Разное количество разделителей (используйте опцию sep).
  • Пропущенные значения (pandas по умолчанию игнорирует NaN, но в mean можно добавить skipna=False).

Типичная ошибка: если в столбцах есть нечисловые данные, mean вызовет ошибку. Решение: предварительно преобразовать типы через pd.to_numeric.

Как решить задачу без внешних библиотек, используя встроенный модуль csv?

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


import csv

students = []
with open('students.csv', 'r', encoding='utf-8') as f:
    reader = csv.DictReader(f)
    for row in reader:
        name = row['Имя']
        grades = [float(row['Оценка1']), float(row['Оценка2']), float(row['Оценка3'])]
        avg = sum(grades) / len(grades)
        students.append((name, avg))

students.sort(key=lambda x: x[1], reverse=True)
for name, avg in students:
    print(f'{name}: {avg:.2f}')

total_avg = sum(s[1] for s in students) / len(students)
print(f'Общий средний балл: {total_avg:.2f}')
  

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

Иван: 4.67
Мария: 4.33
Петр: 3.67
Анна: 3.33
Общий средний балл: 4.00
  

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

Проблемы и их решение:

  • Пропуск строк с некорректными данными: оберните преобразование в try-except.
  • Разделитель не запятая: укажите delimiter при создании reader.
  • Кодировка: если файл в cp1251, измените encoding.

Как работать с таблицей из Excel-файла с помощью openpyxl?

Если источник данных - файл Excel (xlsx), удобно использовать openpyxl. Он позволяет читать ячейки по именам или координатам.


import openpyxl

wb = openpyxl.load_workbook('students.xlsx')
ws = wb.active

students = []
for row in ws.iter_rows(min_row=2, values_only=True):  # пропускаем заголовок
    name = row[0]
    grades = [float(row[1]), float(row[2]), float(row[3])]
    avg = sum(grades) / len(grades)
    students.append((name, avg))

students.sort(key=lambda x: -x[1])
for name, avg in students:
    print(f'{name}: {avg:.2f}')

total_avg = sum(a for _, a in students) / len(students)
print(f'Общий средний балл: {total_avg:.2f}')
  

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

Иван: 4.67
Мария: 4.33
Петр: 3.67
Анна: 3.33
Общий средний балл: 4.00
  

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

Типичные сложности:

  • Пустые ячейки: проверяйте значение перед преобразованием.
  • Файл защищен паролем: openpyxl не сможет открыть без пароля.
  • Большие файлы: используйте read_only=True для экономии памяти.

Как решить задачу с помощью ручного чтения строк и split?

Самый базовый способ - открыть файл, прочитать строки, разбить по разделителю. Подходит для быстрых скриптов без импорта дополнительных модулей.


with open('students.csv', 'r', encoding='utf-8') as f:
    lines = f.readlines()

header = lines[0].strip().split(',')
data = []
for line in lines[1:]:
    parts = line.strip().split(',')
    name = parts[0]
    grades = list(map(float, parts[1:]))
    avg = sum(grades) / len(grades)
    data.append((name, avg))

data.sort(key=lambda x: -x[1])
for name, avg in data:
    print(f'{name}: {avg:.2f}')

print(f'Общий средний балл: {sum(a for _,a in data)/len(data):.2f}')
  

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

Иван: 4.67
Мария: 4.33
Петр: 3.67
Анна: 3.33
Общий средний балл: 4.00
  

Ошибки и ограничения:

  • Строка может содержать запятые внутри кавычек (разбиение некорректно). В таких случаях используйте csv.
  • Пустые строки в конце файла: проверяйте if line.strip().
  • Несоответствие количества столбцов: обрабатывайте исключением.
- Python таблица ввода (таблица ввода в python)
- Python таблица данных (таблица данных в python)
- Python таблица значений (таблица значений в python)

Расширенные примеры и нестандартные сценарии

1. Группировка и агрегация с pandas

Предположим, есть данные о продажах (sales.csv): Дата, Товар, Количество, Цена. Нужно найти общую выручку по каждому товару за месяц.

Пример

import pandas as pd

df = pd.read_csv('sales.csv')
df['Дата'] = pd.to_datetime(df['Дата'])
df['Месяц'] = df['Дата'].dt.month_name()

grouped = df.groupby(['Товар', 'Месяц'])['Цена'].sum() * df.groupby(['Товар', 'Месяц'])['Количество'].sum()
# Альтернатива: df['Выручка'] = df['Количество'] * df['Цена']
# grouped = df.groupby(['Товар', 'Месяц'])['Выручка'].sum()
print(grouped)
Товар     Месяц     
Апельсины Март      1500.0
          Апрель    2000.0
Яблоки    Март      1200.0
          Апрель    1800.0
Name: Выручка, dtype: float64

2. Чтение большого CSV с обработкой по чанкам

Когда файл не помещается в память, pandas позволяет читать по частям.

Пример

import pandas as pd

chunk_size = 10000
result = []
for chunk in pd.read_csv('huge_data.csv', chunksize=chunk_size):
    chunk['total'] = chunk['col1'] + chunk['col2']
    result.append(chunk['total'].mean())

overall_mean = sum(result) / len(result)
print('Среднее по всем чанкам:', overall_mean)

3. Создание таблицы на лету и запись в разные форматы

Иногда необходимо сгенерировать таблицу из данных API и сохранить в Excel или JSON.

Пример

import pandas as pd

data = [
    {'Город': 'Москва', 'Население': 12_000_000},
    {'Город': 'Санкт-Петербург', 'Население': 5_400_000}
]
df = pd.DataFrame(data)
df.to_excel('cities.xlsx', index=False)
df.to_json('cities.json', orient='records', force_ascii=False)
print('Файлы сохранены.')

4. Фильтрация строк по нескольким условиям без pandas

Используя модуль csv и list comprehension.

Пример

import csv

with open('students.csv', 'r') as f:
    reader = csv.DictReader(f)
    filtered = [row for row in reader if float(row['Оценка1']) >= 4 and float(row['Оценка3']) >= 3]

for row in filtered:
    print(row['Имя'])

5. Использование numpy для численных операций над таблицей

Если таблица представлена как массив, можно быстро вычислять средства.

Пример

import numpy as np
import csv

data = []
with open('students.csv', 'r') as f:
    reader = csv.reader(f)
    next(reader)  # пропускаем заголовок
    for row in reader:
        data.append([float(x) for x in row[1:]])

arr = np.array(data)
mean_per_student = arr.mean(axis=1)
mean_overall = arr.mean()
print('Средние по студентам:', mean_per_student)
print('Общий средний балл:', mean_overall)

Задача на таблицу в Python - comments

En
таблица python задача (python)