Функция Pandas pd.notna()
pd.notna()— это функция в библиотеке Pandas, используемая дляобнаружения пропущенных значений. Она проверяет каждый элемент во входном объекте, чтобы определить, является ли он не пропущенным значением, и возвращает результат, состоящий из логических значений (True/False).
Это одна из наиболее часто используемых функций при очистке данных, помогающая быстро выявлять допустимые значения в данных и подготавливать их к последующей обработке и анализу.
Пояснение термина: not«not» — это отрицание,na«na» — сокращение от «not available», поэтому вместе это означает «не пропущенное значение».
Базовый синтаксис и параметры
pd.notna()является функцией верхнего уровня библиотеки Pandas и может вызываться напрямую черезpd.notna(), или через объект Series или DataFrame.notna()метод.
Формат синтаксиса
pd.notna(obj)
Описание параметра
- Параметр:
obj- Тип: любой объект Python, например Series, DataFrame, list, array, скалярное значение и т. д.
- Описание: объект для проверки на непропущенные значения. Пропущенные значения в Pandas включают
None、NaN、NaT(тип отсутствующего времени) иpandas.NA。
Описание функций
- Возвращаемое значение: возвращает булев объект той же формы, что и входной объект. Если это Series или DataFrame, возвращается объект того же типа; если это скаляр, возвращается одно булево значение.
- Действие: возвращает True для непропущенных значений
True, и возвращает False для пропущенных значенийFalse。
Примеры
Давайте досконально освоим использование pd.notna()pd.notna()на серии примеров от простого к сложному.
Пример 1: Базовое использование — Обнаружение пропущенных значений в скалярах и списках
Пример
import numpy as np
# 1. Проверить, являются ли скалярные значения не пропущенными
print("=== Обнаружение скалярных значений ===")
print(f"pd.notna(10): {pd.notna(10)}") # Обычное числовое значение -> True
print(f"pd.notna('example'): {pd.notna('example')}") # Обычная строка -> True
print(f"pd.notna(None): {pd.notna(None)}") # None -> False
print(f"pd.notna(np.nan): {pd.notna(np.nan)}") # np.nan -> False
# 2. Обнаружение пропущенных значений в списке
print("\n=== Обнаружение списка ===")
data_list = [1, 2, np.nan, 'example', None, 5]
result = pd.notna(data_list)
print(f"Исходный список: {data_list}")
print(f"Результат обнаружения: {result.tolist()}") # Преобразовать в список для удобного просмотра
Ожидаемый вывод:
=== 标量检测 ===
pd.notna(10): True
pd.notna('example'): True
pd.notna(None): False
pd.notna(np.nan): False
=== 列表检测 ===
原始列表: [1, 2, nan, 'example', None, 5]
检测结果: [True, False, True, False, True]
Пояснение к коду:
pd.notna(10)иpd.notna('example')Обнаруживает обычные числовые значения и строки, возвращает TrueTrue。pd.notna(None)иpd.notna(np.nan)Обнаруживает маркеры пропущенных значений Python и NumPy, возвращает FalseFalse。- Использование pd.notna() для списка
pd.notna()возвращает список булевых значений, в котором позиции пропущенных значений равны FalseFalse。
Пример 2: Обнаружение пропущенных значений в Series
При обработке данных Series,pd.notna()pd.notna() позволяет быстро находить корректные данные.
Пример
import numpy as np
# Создать Series, содержащий пропущенные значения
s = pd.Series([1, 2, np.nan, 4, None, 'example', np.nan])
print("=== Исходная Series ===")
print(s)
print(f"\nТип: {type(s)}")
# Используйте pd.notna() для обнаружения
print("\n=== результат обнаружения pd.notna() ===)
result = pd.notna(s)
print(result)
# Используйте метод notna() у Series (эквивалентный эффект)
print("\n=== обнаружение методом s.notna() ===)
print(s.notna())
# Отфильтровать значения без пропусков
print("\n=== Фильтрация значений без пропусков ===)
print(s[s.notna()])
Ожидаемый вывод:
=== 原始 Series === 0 1 1 2 2 NaN 3 4 4 None 5 example 6 NaN dtype: object === pd.notna() 检测结果 === 0 True 1 True 2 False 3 True 4 False 5 True 6 False dtype: bool === s.notna() 方法检测 === 0 True 1 True 2 False 3 True 4 False 5 True 6 False dtype: bool === 筛选非缺失值 === 0 1 1 2 3 4 5 example dtype: object
Пояснение к коду:
pd.notna(s)иs.notna()Оба способа могут обнаруживать пропущенные значения в Series и возвращать логический Series.- Использование логической индексации
s[s.notna()]позволяет быстро отфильтровать все элементы без пропусков, что очень полезно при очистке данных.
Пример 3: Обнаружение пропущенных значений в DataFrame
При обработке табличных данных,pd.notna()pd.notna() может быстро выявить полноту данных.
Пример
import numpy as np
# Создать DataFrame, содержащий пропущенные значения
df = pd.DataFrame({
'name': ['Alice', 'Bob', None, 'Diana'],
'age': [25, np.nan, 30, 28],
'score': [85, 90, np.nan, 95]
})
print("=== Исходный DataFrame ===")
print(df)
# Обнаружить весь DataFrame
print("\n=== результат обнаружения pd.notna() ===)
print(pd.notna(df))
# Подсчитать пропущенные значения по столбцам
print("\n=== Количество не пропущенных значений по столбцам ===)
print(df.notna().sum())
# Подсчитать пропущенные значения по строкам
print("\n=== Количество не пропущенных значений по строкам ===)
print(df.notna().sum(axis=1))
# Вычислить долю пропущенных значений
print("\n=== Доля пропущенных значений ===)
missing_ratio = df.isna().mean()
print(missing_ratio)
Ожидаемый вывод:
=== 原始 DataFrame ===
name age score
0 Alice 25 85.0
1 Bob NaN 90.0
2 None 30 NaN
3 Diana 28 95.0
=== pd.notna() 检测结果 ===
name age score
0 True True True
1 True False True
2 False True False
3 True True True
=== 每列非缺失值数量 ===
name 3
age 3
score 3
=== 每行非缺失值数量 ===
0 3
1 2
2 1
3 3
=== 缺失值比例 ===
name 0.25
age 0.25
score 0.25
Пояснение к коду:
pd.notna(df)Возвращает DataFrame с логическими значениями той же формы, что и исходный DataFrame, где каждая позиция указывает, является ли значение непропущенным.df.notna().sum()Считает количество непропущенных значений в каждом столбце.df.isna().mean()Вычисляет долю пропущенных значений в каждом столбце, чтобы помочь оценить качество данных.
Другие расширенияСовет:
pd.notna()иpd.isna()противоположны друг другу.pd.notna()Там, где pd.notna() возвращает True,pd.isna()pd.isna() возвращает False, и наоборот.
Pandas: общие функции