В анализе данных работа с пропущенными значениями – неотъемлемая часть процесса. Библиотека Pandas в Python предоставляет мощные инструменты для обнаружения и обработки таких значений. В этой статье мы подробно рассмотрим функции, предназначенные для проверки наличия значений null (отсутствующих данных) в DataFrame, а также методы работы с ними.
Функции isnull() и isna() для обнаружения значений Null в Pandas DataFrame
Объяснение работы функций isnull() и isna(): синтаксис и основное применение.
В Pandas для проверки наличия пропущенных значений используются функции isnull() и isna(). Обе функции выполняют одну и ту же задачу – возвращают DataFrame или Series, содержащие булевы значения (True если значение является null, и False в противном случае). Синтаксис обеих функций идентичен:
df.isnull()
df.isna()
df – это DataFrame, в котором нужно проверить наличие пропущенных значений. Результатом будет DataFrame той же структуры, но с булевыми значениями.
Примеры использования isnull() и isna() для проверки наличия null во всем DataFrame, в столбце и в отдельной ячейке.
-
Проверка наличия null во всем DataFrame:
import pandas as pd import numpy as np data = {'col1': [1, 2, np.nan], 'col2': [4, np.nan, 6], 'col3': [7, 8, 9]} df = pd.DataFrame(data) print(df.isnull())Результат:
col1 col2 col3 0 False False False 1 False True False 2 True False False -
Проверка наличия null в столбце:
print(df['col1'].isnull())Результат:
0 False 1 False 2 True Name: col1, dtype: bool -
Проверка наличия null в отдельной ячейке:
print(df['col2'][1]) print(pd.isna(df['col2'][1])) # or pd.isnull(df['col2'][1])Результат:
NaN True
Различия между NaN, None и NaT в Pandas
Подробное описание типов данных NaN, None и NaT и их различия.
В Pandas пропущенные значения могут быть представлены разными типами данных:
-
NaN (Not a Number): Специальное значение с плавающей точкой, представляющее отсутствующие числовые данные. Это стандартный способ представления пропущенных чисел в Pandas и NumPy.
-
None: Объект Python, который может представлять отсутствующие данные в столбцах с типом данных
object(обычно это столбцы со строками или смешанными типами данных). -
NaT (Not a Time): Представляет отсутствующие значения даты и времени (datetime). Используется в столбцах с типом данных
datetime64[ns].
Как Pandas обрабатывает различные типы отсутствующих значений и как это влияет на анализ данных.
Pandas стремится обрабатывать NaN, None и NaT единообразно, конвертируя None в NaN (если это возможно) для обеспечения консистентности. Однако важно учитывать, что тип данных столбца может влиять на то, как Pandas обрабатывает отсутствующие значения. Например, столбец с целочисленным типом данных не может содержать NaN, поэтому Pandas автоматически преобразует его в тип float64, чтобы можно было представить пропущенные значения.
Работа с пропущенными значениями: заполнение и удаление
Использование функции fillna() для заполнения пропущенных значений: различные методы и стратегии.
Функция fillna() позволяет заполнить пропущенные значения различными способами:
-
Заполнение константой:
df.fillna(0) # Заполнить все NaN нулями «`
-
Заполнение средним, медианой или модой:
df[‘col1’].fillna(df[‘col1’].mean()) # Заполнить средним значением столбца ‘col1’ df[‘col2’].fillna(df[‘col2’].median()) # Заполнить медианой столбца ‘col2’ df[‘col3’].fillna(df[‘col3’].mode()[0]) # Заполнить модой столбца ‘col3’ «`
-
Заполнение с использованием предыдущего или следующего значения:
df.fillna(method=’ffill’) # Заполнить предыдущим значением (forward fill) df.fillna(method=’bfill’) # Заполнить следующим значением (backward fill) «`
Удаление строк или столбцов с пропущенными значениями с помощью dropna(): параметры и сценарии использования.
Функция dropna() позволяет удалять строки или столбцы, содержащие пропущенные значения:
-
Удаление строк с пропущенными значениями:
df.dropna() # Удалить все строки, содержащие хотя бы одно NaN «`
-
Удаление столбцов с пропущенными значениями:
df.dropna(axis=1) # Удалить все столбцы, содержащие хотя бы одно NaN «`
-
Удаление строк/столбцов, в которых все значения пропущены:
df.dropna(how=’all’) # Удалить строки, где все значения NaN df.dropna(axis=1, how=’all’) # Удалить столбцы, где все значения NaN «`
-
Удаление строк/столбцов с пороговым значением пропущенных значений:
df.dropna(thresh=2) # Удалить строки, в которых менее 2 не-NaN значений. «`
Продвинутые методы работы с Null значениями
Подсчет количества пропущенных значений в DataFrame и столбцах: комбинация isnull() с другими функциями Pandas.
Для подсчета количества пропущенных значений можно использовать комбинацию isnull() (или isna()) и sum():
import pandas as pd
import numpy as np
data = {'col1': [1, 2, np.nan], 'col2': [4, np.nan, 6], 'col3': [7, 8, 9]}
df = pd.DataFrame(data)
print(df.isnull().sum()) # Количество NaN в каждом столбце
print(df.isnull().sum().sum()) # Общее количество NaN в DataFrame
Условная работа с Null значениями: фильтрация данных на основе наличия/отсутствия пропущенных значений.
Можно фильтровать DataFrame на основе наличия или отсутствия пропущенных значений:
df[df['col2'].isnull()] # Выбрать строки, где в столбце 'col2' значение NaN
df[df['col2'].notnull()] # Выбрать строки, где в столбце 'col2' значение не NaN
Заключение
Функции isnull() и isna() являются ключевыми инструментами для обнаружения пропущенных значений в Pandas DataFrame. Понимание различий между NaN, None и NaT, а также умение использовать fillna() и dropna() позволяет эффективно обрабатывать пропущенные данные, обеспечивая более точный и надежный анализ данных. Использование комбинаций этих функций с другими возможностями Pandas, такими как фильтрация и агрегация, открывает широкие возможности для решения задач, связанных с очисткой и подготовкой данных.