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

Python math 模块Pandas: общие функции


pd.isna()является наиболее часто используемой функцией обнаружения пропущенных значений в Pandas. Она проверяет, является ли каждый элемент пропущенным значением, и возвращает булево значение (TrueилиFalse) структура.

В анализе данных обработка пропущенных значений — очень важный первый шаг.pd.isna()Это может помочь быстро определить места пропусков в данных, создавая основу для последующего заполнения, удаления или других операций обработки.


Базовый синтаксис и параметры

Формат синтаксиса

pandas.isna(obj)

Описание параметра

ПараметрTypeОписание
objDataFrame, Series, скаляр, list, tupleОбъект, для которого необходимо проверить пропущенные значения; может быть любого поддерживаемого типа данных.

Описание возвращаемого значения

  • Возвращает логический объект с той же структурой, что и входные данные:
  • Если входные данные — DataFrame, возвращает логический DataFrame
  • Если входные данные — Series, возвращает логический Series
  • Если входные данные — одиночное значение, возвращает логический скаляр

Пример

Давайте с помощью серии примеров от простого к сложному тщательно освоимpd.isna()его использование.

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

Пример

import pandas as pd
import numpy as np

# Создать Series, содержащий пропущенные значения
s = pd.Series([1, 2, np.nan, 4, None, 6])

# Обнаружение пропущенных значений
result = pd.isna(s)
print("Исходный ряд:")
print(s)
print("\n"Результат обнаружения:")
print(result)

Вывод:

原始 Series:
0    1.0
1    2.0
2    NaN
3    4.0
4    NaN
5    6.0
dtype: float64

检测结果:
0    False
1    False
2     True
3    False
4     True
5    False
dtype: bool

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

  1. np.nanиNoneвсе распознаются как пропущенные значения
  2. В возвращённом логическом Series позиции пропущенных значенийTrue, позиции непропущенных значений:False

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

Пример

import pandas as pd
import numpy as np

# Создать DataFrame, содержащий пропущенные значения
df = pd.DataFrame({
    'A': [1, 2, np.nan, 4],
    'B': ['a', Отсутствует, 'c', 'd'],
    'C': [pd.NaT, 6, 7, 8]  # NaT — это пропущенное значение для типа времени
})

# Обнаружение пропущенных значений
result = pd.isna(df)
print("Исходный DataFrame:")
print(df)
print("\n"Результат обнаружения:")
print(result)

Вывод:

原始 DataFrame:
     A    B     C
0  1.0    a  None
1  2.0  None     6
2  NaN   c     7
3  4.0    d     8
dtype: object

检测结果:
       A      B      C
0  False  False   True
1  False   True  False
2   True  False  False
3  False  False  False

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

  • pd.NaT(Not a Time) — это пропущенное значение типа времени, и оно также правильно распознается
  • Каждая позиция в DataFrame возвращает соответствующее логическое значение

Пример 3: Подсчёт пропущенных значений

В реальном анализе данных нам часто нужно знать, сколько пропущенных значений имеется.

Пример

import pandas as pd
import numpy as np

# Создание данных
df = pd.DataFrame({
    'A': [1, np.nan, 3, np.nan, 5],
    'B': [np.nan, 2, np.nan, 4, np.nan],
    'C': [1, 2, 3, 4, 5]
})

# Подсчёт пропущенных значений в каждом столбце
print("Количество пропущенных значений по столбцам:")
print(pd.isna(df).sum())

print("\n"Всего пропущенных значений:", pd.isna(df).sum().sum())

# Вычислить долю пропущенных значений
print("\n"Доля пропущенных значений:")
print((pd.isna(df).sum() / len(df) * 100).round(2), "%")

Вывод:

每列缺失值数量:
A    2
B    3
C    0
dtype: int64

总缺失值数量: 5

缺失值比例:
A    40.0
B    60.0
C     0.0
%

Пример 4: Комбинирование с другими функциями

Пример

import pandas as pd
import numpy as np

# Создание данных
df = pd.DataFrame({
    'name': ['Alice', 'Bob', None, 'Diana', 'Ева'],
    'age': [25, None, 35, 28, None],
    'score': [85, 90, 78, 92, 88]
})

# Использовать isna для фильтрации строк с пропущенными значениями
rows_with_na = df[pd.isna(df).any(axis=1)]
print("Строки с пропущенными значениями:")
print(rows_with_na)

# Использовать isna для заполнения пропущенных значений
df_filled = df.fillna({
    'name': 'Неизвестно',
    'age': df['age'].mean(),  # Заполнить age средним значением
    'score': 0
})
print("\n"DataFrame после заполнения:")
print(df_filled)

Вывод:

包含缺失值的行:
   name   age  score
0  Alice  25.0     85
2  None  35.0     78
3  Diana  28.0     92

填充后的 DataFrame:
     name   age  score
0    Alice  25.0     85
1      Bob  29.0     90
2  Unknown  35.0     78
3    Diana  28.0     92
4      Eve   0.0     88

Важные замечания

Важные советы:pd.isna()Следующие значения будут распознаны как пропущенные значения:

  • np.nan- Пропущенные значения числового типа
  • None- Встроенный объект None в Python
  • pd.NaT- Пропущенные значения типа datetime

Для пустых строк""или0,pd.isna()вернётFalse, потому что они не являются пропущенными значениями.


Python math 模块Pandas: общие функции

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