Нашли ошибку?
Скачать чистый
урок 4 из 5≈ 15 минупражнения: 0 из 3

Массив из файла

Загрузить числа из CSV-файла — всю таблицу или один столбец — и сохранить результат обратно в файл.

Python запустится при первом выполнении

Настоящие данные не набирают руками — их загружают из файла. В этом уроке — погода в Москве за 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?

Без skiprows=1 loadtxt пытается превратить в число слово day из заголовка и падает:

[ ]Заголовок прочитан как данныеошибка: ValueError
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
[ ]Упражнение 1Максимальные температуры решено

Загрузите из файла только столбец temp_max (он третий, его номер — 2) и сохраните в tmax. Затем сохраните в warm_avg среднюю максимальную температуру за год.

tmax = ...
warm_avg = ...

[ ]Упражнение 2Осадки за год решено

Загрузите столбец осадков precip_mm в precip и посчитайте, сколько миллиметров осадков выпало за год — сохраните в rain_total.

precip = ...
rain_total = ...

Сохранить результат: np.savetxt

np.savetxt(путь, массив) записывает массив в текстовый файл, по числу в строке. Параметр fmt= задаёт, как печатать числа: "%.1f" — с одним знаком после точки:

[ ]Сохранить температуры в °F
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
[ ]Упражнение 3Файл минимальных температур решено

Загрузите столбец temp_min (номер 1) в tmin и сохраните его в файл data/tmin.txt, по числу в строке, с одним знаком после точки.

tmin = ...
# сохраните tmin в файл data/tmin.txt

Итоги

  • np.loadtxt(путь, delimiter=",", skiprows=1) — числа из CSV в массив; строка файла — строка массива.
  • usecols= — загрузить только нужный столбец (номер с нуля).
  • Текст в числах (например, незамеченный заголовок) — ошибка could not convert string.
  • np.savetxt(путь, массив, fmt="%.1f") — записать массив в файл.

Подробнее в справочнике

Нашли ошибку?