Поиск по сайту:

Как использовать Python pandas dropna() для удаления значений NA из DataFrame


Введение

В этом руководстве вы узнаете, как использовать функцию Panda DataFrame dropna().

Значения NA имеют значение «Недоступно». Это может относиться к Null, None, pandas.NaT или numpy.nan. Использование dropna() удалит строки и столбцы с этими значениями. Это может быть полезно для предоставления вам только действительных данных.

По умолчанию эта функция возвращает новый кадр данных, а исходный кадр данных остается неизменным.

Это руководство было проверено с помощью Python 3.10.9, pandas 1.5.2 и NumPy 1.24.1.

Синтаксис

dropna() принимает следующие параметры:

dropna(self, axis=0, how="any", thresh=None, subset=None, inplace=False)

  • ось: {0 (или индекс), 1 (или столбцы)}, по умолчанию 0
  • Если 0, удалить строки с отсутствующими значениями.
  • Если 1, удалить столбцы с отсутствующими значениями.
  • как: {любой, все}, по умолчанию любой
  • Если любой, удалить строку или столбец, если какое-либо из значений NA.
  • Если all, удалить строку или столбец, если все значения равны NA.
  • thresh: (необязательно) значение int, указывающее пороговое значение для операции удаления.
  • subset: (необязательно) метка столбца или последовательность меток для указания строк или столбцов.
  • inplace: (необязательно) значение bool.
  • Если True, исходный DataFrame изменяется и возвращается None.

Создание примеров фреймов данных

Создайте образец DataFrame, который содержит допустимые и недопустимые значения:

import pandas as pd
import numpy as np

d1 = {
'Name': ['Shark', 'Whale', 'Jellyfish', 'Starfish'],
'ID': [1, 2, 3, 4],
'Population': [100, 200, np.nan, pd.NaT],
'Regions': [1, None, pd.NaT, pd.NaT]
}

df1 = pd.DataFrame(d1)
print(df1)

Этот код распечатает DataFrame:

Output
Name ID Population Regions 0 Shark 1 100 1 1 Whale 2 200 None 2 Jellyfish 3 NaN NaT 3 Starfish 4 NaT NaT

Затем добавьте второй кадр данных с дополнительными строками и столбцами со значениями NA:

d2 = {
'Name': ['Shark', 'Whale', 'Jellyfish', 'Starfish', pd.NaT],
'ID': [1, 2, 3, 4, pd.NaT],
'Population': [100, 200, np.nan, pd.NaT, pd.NaT],
'Regions': [1, None, pd.NaT, pd.NaT, pd.NaT],
'Endangered': [pd.NaT, pd.NaT, pd.NaT, pd.NaT, pd.NaT]
}

df2 = pd.DataFrame(d2)
print(df2)

Это выведет новый DataFrame:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT 2 Jellyfish 3 NaN NaT NaT 3 Starfish 4 NaT NaT NaT 4 NaT NaT NaT NaT NaT

Вы будете использовать предыдущие кадры данных в следующих примерах.

Удаление всех строк с пропущенными значениями

Используйте dropna() для удаления строк с любыми значениями None, NaN или NaT:

dfresult = df1.dropna()
print(dfresult)

Это выведет:

Output
Name ID Population Regions 0 Shark 1 100 1

Новый кадр данных с одной строкой, не содержащей значений NA.

Удаление всех столбцов с пропущенными значениями

Используйте dropna() с axis=1, чтобы удалить столбцы с любым None, NaN или NaT значения:

dfresult = df1.dropna(axis=1)
print(dfresult)

Столбцы с любыми значениями None, NaN или NaT будут удалены:

Output
Name ID 0 Shark 1 1 Whale 2 2 Jellyfish 3 3 Starfish 4

Новый кадр данных с одним столбцом, содержащим значения, отличные от NA.

Удаление строк или столбцов, если все значения равны нулю, как

Используйте второй DataFrame и как:

dfresult = df2.dropna(how='all')
print(dfresult)

Строки со значениями all, равными NA, будут удалены:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT 2 Jellyfish 3 NaN NaT NaT 3 Starfish 4 NaT NaT NaT

Пятый ряд был опущен.

Затем используйте how и укажите ось:

dfresult = df2.dropna(how='all', axis=1)
print(dfresult)

Столбцы со значениями all, равными NA, будут удалены:

Output
Name ID Population Regions 0 Shark 1 100 1 1 Whale 2 200 None 2 Jellyfish 3 NaN NaT 3 Starfish 4 NaT NaT 4 NaT NaT NaT NaT

Пятая колонна была сброшена.

Удаление строк или столбцов, если порог пересекается с thresh

Используйте второй кадр данных с thresh, чтобы удалить строки, которые не соответствуют пороговому значению не менее 3 не-NA значений:

dfresult = df2.dropna(thresh=3)
print(dfresult)

Строки, в которых нет по крайней мере 3, кроме NA, будут удалены:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT

Третий, четвертый и пятый ряды были опущены.

Удаление строк или столбцов для определенных подмножеств

Используйте второй кадр данных с subset, чтобы удалить строки со значениями NA в столбце Population:

dfresult = df2.dropna(subset=['Population'])
print(dfresult)

Строки, содержащие Population со значениями NA, будут удалены:

Output
Name ID Population Regions Endangered 0 Shark 1 100 1 NaT 1 Whale 2 200 None NaT

Третий, четвертый и пятый ряды были опущены.

Вы также можете указать значения index в subset при удалении столбцов из DataFrame:

dfresult = df2.dropna(subset=[1, 2], axis=1)
print(dfresult)

Столбцы, содержащие значения NA в подмножестве строк 1 и 2:

Output
Name ID 0 Shark 1 1 Whale 2 2 Jellyfish 3 3 Starfish 4 4 NaT NaT

Третий, четвертый и пятый столбцы были удалены.

Изменение исходного DataFrame после удаления строк или столбцов на месте

По умолчанию dropna() не изменяет исходный фрейм данных. Однако в некоторых случаях вы можете захотеть сэкономить память при работе с большим исходным фреймом данных, используя inplace.

df1.dropna(inplace=True)
print(df1)

В этом коде не используется переменная dfresult.

Это выведет:

Output
Name ID Population Regions 0 Shark 1 100 1

Исходный DataFrame был изменен.

Заключение

В этой статье вы использовали функцию dropna() для удаления строк и столбцов со значениями NA.

Продолжите свое обучение с помощью дополнительных руководств по Python и pandas — pandas Drop Duplicate Rows.

Рекомендации

  • Pandas DataFrame dropna() API Doc