Настоящие данные не набирают руками — их загружают из файла. В этом уроке — погода в Москве за 2025 год,
по дню в строке: файл data/moscow_2025.csv уже лежит рядом с уроком. CSV — это текст, поэтому сначала
посмотрим на его начало как на обычный текст: open открывает файл, метод read читает его целиком, а with
сам закроет файл, когда блок закончится.
with open("data/moscow_2025.csv") as f:
print(f.read()[:120])day,temp_min,temp_max,precip_mm 1,-9.9,-3.2,0.0 2,-9.7,-3.2,0.0 3,-9.0,-3.7,0.0 4,-14.2,-7.2,1.4 5,-12.6,-7.2,0.0 6,-12.
Первая строка — заголовок: названия столбцов. Дальше — данные через запятую: номер дня, минимальная и максимальная температура, осадки в миллиметрах.
Загрузить таблицу: np.loadtxt
np.loadtxt читает текстовый файл с числами в массив. Ему нужно сказать, чем разделены значения —
delimiter=",", и сколько строк сверху пропустить — skiprows=1, чтобы не читать заголовок:
import numpy as np
weather = np.loadtxt("data/moscow_2025.csv", delimiter=",", skiprows=1)
print(weather.shape)
weather(365, 4)
array([[ 1. , -9.9, -3.2, 0. ],
[ 2. , -9.7, -3.2, 0. ],
[ 3. , -9. , -3.7, 0. ],
...,
[363. , -10.9, -6.4, 0. ],
[364. , -10.1, -4.8, 4.1],
[365. , -7.1, -2. , 0. ]], shape=(365, 4))Получилась таблица 365 × 4: по строке на день, по столбцу на показатель. Большие массивы NumPy показывает
сокращённо — несколько строк начала, ... и конец; строки не пропали, просто не напечатаны. Все числа дробные — loadtxt по
умолчанию читает всё как float.
Сколько всего чисел в weather — чему равен weather.size?
(365, 4): 365 строк по 4 числа — всего 365 × 4 = 1460. size считает все элементы, а не строки: строк — это len(weather).Без skiprows=1 loadtxt пытается превратить в число слово day из заголовка и падает:
np.loadtxt("data/moscow_2025.csv", delimiter=",")ValueError: could not convert string 'day' to float64 at row 0, column 1.
Только нужный столбец: usecols
Брать отдельные столбцы из таблицы мы научимся в следующем модуле. А пока loadtxt может загрузить сразу
один столбец — номер в usecols= (считая с нуля). Получится обычный одномерный массив:
hot = np.loadtxt("data/moscow_2025.csv", delimiter=",", skiprows=1, usecols=2)
print(hot.shape)
print(hot.min(), hot.max())(365,) -10.7 27.2
Загрузите из файла только столбец temp_max (он третий, его номер — 2) и сохраните в tmax. Затем сохраните
в warm_avg среднюю максимальную температуру за год.
delimiter="," и skiprows=1, плюс usecols=2.mean.Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
tmax = ...
warm_avg = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
tmax = np.loadtxt("data/moscow_2025.csv", delimiter=",", skiprows=1, usecols=2)
warm_avg = tmax.mean()Загрузите столбец осадков precip_mm в precip и посчитайте, сколько миллиметров осадков выпало за год —
сохраните в rain_total.
Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
precip = ...
rain_total = ...Упражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
precip = np.loadtxt("data/moscow_2025.csv", delimiter=",", skiprows=1, usecols=3)
rain_total = precip.sum()Сохранить результат: np.savetxt
np.savetxt(путь, массив) записывает массив в текстовый файл, по числу в строке. Параметр fmt= задаёт, как
печатать числа: "%.1f" — с одним знаком после точки:
np.savetxt("data/fahrenheit.txt", hot * 9 / 5 + 32, fmt="%.1f")
with open("data/fahrenheit.txt") as f:
print(f.read()[:30])26.2 26.2 25.3 19.0 19.0 18.0
Загрузите столбец temp_min (номер 1) в tmin и сохраните его в файл data/tmin.txt, по числу в строке,
с одним знаком после точки.
usecols=1.np.savetxt("data/tmin.txt", tmin, fmt="%.1f").Заготовка упражнения обновилась с тех пор, как вы сохранили свой код.
Вернуть заготовку? Ваш код в этом упражнении будет удалён.
tmin = ...
# сохраните tmin в файл data/tmin.txtУпражнение пока не решено, поэтому для ячеек ниже выполнено эталонное решение — ваш код не изменён.
tmin = np.loadtxt("data/moscow_2025.csv", delimiter=",", skiprows=1, usecols=1)
np.savetxt("data/tmin.txt", tmin, fmt="%.1f")Итоги
np.loadtxt(путь, delimiter=",", skiprows=1)— числа из CSV в массив; строка файла — строка массива.usecols=— загрузить только нужный столбец (номер с нуля).- Текст в числах (например, незамеченный заголовок) — ошибка
could not convert string. np.savetxt(путь, массив, fmt="%.1f")— записать массив в файл.