Функция Pandas pd.isna()
pd.isna()является наиболее часто используемой функцией обнаружения пропущенных значений в Pandas. Она проверяет, является ли каждый элемент пропущенным значением, и возвращает булево значение (TrueилиFalse) структура.
В анализе данных обработка пропущенных значений — очень важный первый шаг.pd.isna()Это может помочь быстро определить места пропусков в данных, создавая основу для последующего заполнения, удаления или других операций обработки.
Базовый синтаксис и параметры
Формат синтаксиса
pandas.isna(obj)
Описание параметра
| Параметр | Type | Описание |
|---|---|---|
| obj | DataFrame, Series, скаляр, list, tuple | Объект, для которого необходимо проверить пропущенные значения; может быть любого поддерживаемого типа данных. |
Описание возвращаемого значения
- Возвращает логический объект с той же структурой, что и входные данные:
- Если входные данные — DataFrame, возвращает логический DataFrame
- Если входные данные — Series, возвращает логический Series
- Если входные данные — одиночное значение, возвращает логический скаляр
Пример
Давайте с помощью серии примеров от простого к сложному тщательно освоимpd.isna()его использование.
Пример 1: Обнаружение пропущенных значений в Series
Пример
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
Пояснение к коду:
np.nanиNoneвсе распознаются как пропущенные значения- В возвращённом логическом Series позиции пропущенных значений
True, позиции непропущенных значений:False
Пример 2: Обнаружение пропущенных значений в DataFrame
Пример
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 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 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 в Pythonpd.NaT- Пропущенные значения типа datetime
Для пустых строк""или0,pd.isna()вернётFalse, потому что они не являются пропущенными значениями.
Другие расширения
Pandas: общие функции