Функция Pandas pd.notna()

Pandas 通用函数Pandas: общие функции


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 pandas as pd
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]

Пояснение к коду:

  1. pd.notna(10)иpd.notna('example')Обнаруживает обычные числовые значения и строки, возвращает TrueTrue。
  2. pd.notna(None)иpd.notna(np.nan)Обнаруживает маркеры пропущенных значений Python и NumPy, возвращает FalseFalse。
  3. Использование pd.notna() для спискаpd.notna()возвращает список булевых значений, в котором позиции пропущенных значений равны FalseFalse。

Пример 2: Обнаружение пропущенных значений в Series

При обработке данных Series,pd.notna()pd.notna() позволяет быстро находить корректные данные.

Пример

import pandas as pd
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 pandas as pd
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 常用函数Pandas: общие функции

Другие расширения