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. Никаких заранее созданных переменных нет — вы читаете всё сами.
Что нужно сделать
Напишите программу, которая:
- Читает из
stdinцелое числоn— количество строк таблицы. - Читает следующие
nстрок; каждая содержит три токена через пробел:
qty— целое число или строкаNA;price— вещественное число или строкаNA;active— строкаTrue,FalseилиNA.
- Строит
pd.DataFrameс именемdfсо столбцами:
'qty'с dtypeInt64(nullable integer);'price'с dtypeFloat64(nullable float);'active'с dtypeboolean(nullable boolean).
- Шаг A. Выводит одну строку:
isna_sum=<qty_na> <price_na> <active_na>— число пропусков по каждому столбцу через пробел. - Шаг B. Заполняет пропуски в
df['qty']значением0черезfillna(0), сохраняет вqty_filled. Выводит одну строку:qty_dtype=<dtype>, где<dtype>—dtypeрезультата. - Шаг C. Заполняет пропуски в
df['price']черезffill(), сохраняет вprice_ffilled. Выводит значения через пробел, округлив до одного знака. Если первый элемент — пропуск иffillне смог его заполнить, выводитNAдля этой позиции. - Шаг 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
Без регистрации. Гостевая проверка не сохраняет прогресс. Для сохранения перейдите к уроку.
Отправьте решение, чтобы увидеть результаты тестов.
Связанные задачи
- pandas dropna subset: какие строки удаляются и почему
- pandas dropna: how, subset и форма таблицы
- pandas: количество пропусков по столбцам — задача
- Описание схемы DataFrame: dtype, пропуски и уникальные значения
- pandas Series из словаря: index, shape и dtype
- pandas DataFrame из списка словарей: пример и задача
