Как использовать 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:
OutputName 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:
OutputName 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)
Это выведет:
OutputName 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
будут удалены:
OutputName ID
0 Shark 1
1 Whale 2
2 Jellyfish 3
3 Starfish 4
Новый кадр данных с одним столбцом, содержащим значения, отличные от NA
.
Удаление строк или столбцов, если все значения равны нулю, как
Используйте второй DataFrame и как
:
dfresult = df2.dropna(how='all')
print(dfresult)
Строки со значениями all
, равными NA
, будут удалены:
OutputName 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
, будут удалены:
OutputName 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
, будут удалены:
OutputName 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
, будут удалены:
OutputName 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
:
OutputName 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
.
Это выведет:
OutputName ID Population Regions
0 Shark 1 100 1
Исходный DataFrame был изменен.
Заключение
В этой статье вы использовали функцию dropna()
для удаления строк и столбцов со значениями NA
.
Продолжите свое обучение с помощью дополнительных руководств по Python и pandas — pandas Drop Duplicate Rows.
Рекомендации
- Pandas DataFrame
dropna()
API Doc