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

Введение

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

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

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

Этот учебник проверен с использованием 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)
  • axis: {0 (или 'index'), 1 (или 'columns')}, по умолчанию 0
  • Если 0, удаляются строки с отсутствующими значениями.
  • Если 1, удаляются столбцы с отсутствующими значениями.
  • how: {'any', 'all'}, по умолчанию 'any'
  • Если 'any', удаляется строка или столбец, если хотя бы одно из значений равно NA.
  • Если 'all', удаляется строка или столбец, если все значения равны NA.
  • thresh: (опционально) значение int, указывающее порог для операции удаления.
  • subset: (опционально) метка столбца или последовательность меток для указания строк или столбцов.
  • inplace: (опционально) значение bool.
  • Если True, исходный DataFrame изменяется, и возвращается None.

Создание образцовых DataFrame

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

dropnaExample.py
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

Затем добавьте второй DataFrame с дополнительными строками и столбцами со значениями 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

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

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

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

dropnaExample.py
dfresult = df1.dropna()
print(dfresult)

Это выведет:

Output
Name ID Population Regions 0 Shark 1 100 1

A new DataFrame with a single row that didn’t contain any NA values.

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

Используйте 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

A new DataFrame with a single column that contained non-NA values.

Удаление строк или столбцов, если все значения Null с помощью how

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

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

Будут удалены строки со значениями, все равными 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 и укажите axis:

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

Будут удалены столбцы со значениями, все равными 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

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

dropnaExample.py
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

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

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

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

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

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

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

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

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

dropnaExample.py
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 после удаления строк или столбцов с помощью inplace

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

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

Этот код не использует переменную dfresult.

Это приведет к выводу:

Output
Name ID Population Regions 0 Shark 1 100 1

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

Вывод

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

Продолжайте обучение с помощью дополнительных учебных пособий по Python и pandas – Руководство по модулю Python pandas, Удаление дублирующихся строк в pandas.

Ссылки

Source:
https://www.digitalocean.com/community/tutorials/pandas-dropna-drop-null-na-values-from-dataframe