Обработка и замена NaN на int в DataFrame Pandas

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Для интерпретации колонки с NaN значениями в pandas как типа nullable целого числа (Int64), воспользуйтесь следующей командой:

Python
Скопировать код
df['column'] = df['column'].astype('Int64')

Такое преобразование позволяет распознавать NaN как пропущенные значения и проводить операции с целыми числами без возникновения ошибок.

Кинга Идем в IT: пошаговый план для смены профессии

Преобразование смешанных типов данных

Если в колонке датафрейма присутствуют числовые значения и NaN, их можно привести к целочисленному типу, предварительно преобразовав в float, а затем в Int64:

Python
Скопировать код
df['column'] = df['column'].astype(float).astype('Int64')

Это обеспечит корректное распознавание числовых данных перед преобразованием в формат nullable целого числа.

Интеллектуальная замена NaN

Если необходимо заменить NaN на определённое значение перед преобразованием колонки в int, используйте следующую команду:

Python
Скопировать код
df['column'] = df['column'].fillna(0).astype('Int64')

Помните, что данное преобразование меняет NaN на нули, и это может повлиять на результаты анализа данных за счёт внесения информации, которая не существует изначально.

Визуализация

Можно представить процесс преобразования колонки Pandas с NaN в int как замену в банке, наполненной фруктами и сладостями, конфет именно на фрукты:

Markdown
Скопировать код
Начальное содержимое (🍏🍬🍓🍬🍬🍬): 
  # 🍏🍓 — это числа, 🍬 — это NaN

После замены (🍏🍓🌰🌰🌰): 
  # Теперь все элементы представляют собой значения, 🌰 символизирует замену NaN

Используйте функцию pd.to_numeric() с параметром downcast для приведения к "integer":

Python
Скопировать код
df['col'] = pd.to_numeric(df['col'], downcast='integer', errors='coerce').fillna(-1).astype(int)

Таким образом, NaN заменяются на целочисленные значения (🌰):

Markdown
Скопировать код
Конечное содержимое (🍏🍓🌰🌰🌰): 
  # Все данные теперь целочисленные, проблемы с NaN решены.

Погружение в детали

Вещественное число в качестве альтернативы

Если нет необходимости в строгом целочисленном типе данных, можно воспользоваться вещественным или float:

Python
Скопировать код
df['column'] = df['column'].astype(float)

Работа с объектами

Для преобразования колонки типа object, содержащей строки и NaN, следует в первую очередь обработать текстовые данные:

Python
Скопировать код
df['column'] = pd.to_numeric(df['column'], errors='coerce').astype('Int64')

С параметром errors='coerce' текстовые значения преобразуются в NaN, затем их можно без проблем конвертировать в nullable целые числа.

Возврат к NaN

Если после замены и преобразования возникла необходимость вернуться к NaN, воспользуйтесь следующей командой:

Python
Скопировать код
df['column'] = df['column'].replace(-1, pd.NA)

Полезные материалы

  1. Nullable integer data type — документация pandas 2.2.0
  2. python – Как преобразовать колонку Pandas, содержащую NaN, в тип int – Stack Overflow
  3. pandas.DataFrame.astype — документация pandas 2.2.0
  4. Работа со с пропущенными данными — документация pandas 2.2.0
  5. Модуль numpy.ma — Руководство NumPy v1.26
  6. Очистка данных в Python с использованием pandas и NumPy – Real Python