pandas fillna: заполнение пропусков и nullable-типы Int64

fillna в pandas заменяет пропущенные значения указанным значением или по словарю столбцов. Nullable-типы Int64, Float64 и boolean позволяют хранить пропуски без потери смысла типа.

Пропуск и ноль означают разное

Int64 с большой буквы — nullable-тип pandas, а int64 — обычный целочисленный тип NumPy. Для количества pd.NA означает «неизвестно», а ноль — известное отсутствие. Поэтому заполнять все пропуски нулём без проверки смысла данных опасно.

Для разных столбцов выбирайте совместимые значения: число для числового столбца и True/False для nullable boolean. fillna возвращает результат; сохраните его в переменную. До и после заполнения сравните isna().sum() и dtype.

Пример на других данных

import pandas as pd
s = pd.Series([2, pd.NA, 5], dtype="Int64")
filled = s.fillna(0)
print(int(s.isna().sum()), int(filled.isna().sum()))
print(filled.tolist(), filled.dtype)

Результат:

1 0
[2, 0, 5] Int64

Попробуйте сами

Ниже — отдельное упражнение: напишите код и запустите проверку. Другие упражнения по этой теме. Для обучения по порядку откройте бесплатный курс NumPy и pandas.

Nullable dtype и fillna: Int64, Float64, boolean после заполнения пропусков

Что уже дано

Проверяющая система запускает вашу программу и подаёт данные через stdin. Никаких заранее созданных переменных нет — вы читаете всё сами.

Что нужно сделать

Напишите программу, которая:

  1. Читает из stdin целое число n — количество строк таблицы.
  2. Читает следующие n строк; каждая содержит три токена через пробел:
  • qty — целое число или строка NA;
  • price — вещественное число или строка NA;
  • active — строка True, False или NA.
  1. Строит pd.DataFrame с именем df со столбцами:
  • 'qty' с dtype Int64 (nullable integer);
  • 'price' с dtype Float64 (nullable float);
  • 'active' с dtype boolean (nullable boolean).
  1. Шаг A. Выводит одну строку: isna_sum=<qty_na> <price_na> <active_na> — число пропусков по каждому столбцу через пробел.
  2. Шаг B. Заполняет пропуски в df['qty'] значением 0 через fillna(0), сохраняет в qty_filled. Выводит одну строку: qty_dtype=<dtype>, где <dtype> — dtype результата.
  3. Шаг C. Заполняет пропуски в df['price'] через ffill(), сохраняет в price_ffilled. Выводит значения через пробел, округлив до одного знака. Если первый элемент — пропуск и ffill не смог его заполнить, выводит NA для этой позиции.
  4. Шаг D. Заполняет пропуски в df['active'] значением False через fillna(False), сохраняет в active_filled. Выводит одну строку: active_dtype=<dtype>, где <dtype> — dtype результата.

Во всех шагах исходный df не изменяется.

Ввод и вывод

Программа читает stdin и пишет в stdout.

Формат ввода

n
qty0 price0 active0
qty1 price1 active1
...

Токен NA означает пропуск в соответствующем столбце.

Формат вывода

Ровно четыре строки в порядке A → B → C → D.

Пример

Ввод
5
10 250.0 True
NA 180.0 NA
5 NA False
NA NA NA
8 320.0 True
Вывод
isna_sum=2 2 2
qty_dtype=Int64
250.0 180.0 180.0 180.0 320.0
active_dtype=boolean
РешениеPython

Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.

Отправьте решение, чтобы увидеть результаты тестов.

Связанные задачи