Как удалить строки со значениями nan в pandas
Часто вам может потребоваться удалить строки, содержащие значения NaN, в DataFrame pandas. К счастью, это легко сделать с помощью функции pandas dropna() .
В этом руководстве показано несколько примеров использования этой функции в следующем DataFrame pandas:
import numpy as np import scipy.stats as stats #create DataFrame with some NaN values df = pd.DataFrame({'rating': [np.nan, 85, np.nan, 88, 94, 90, 76, 75, 87, 86], 'points': [np.nan, 25, 14, 16, 27, 20, 12, 15, 14, 19], 'assists': [5, 7, 7, np.nan, 5, 7, 6, 9, 9, 5], 'rebounds': [11, 8, 10, 6, 6, 9, 6, 10, 10, 7]}) #view DataFrame df rating points assists rebounds 0 NaN NaN 5.0 11 1 85.0 25.0 7.0 8 2 NaN 14.0 7.0 10 3 88.0 16.0 NaN 6 4 94.0 27.0 5.0 6 5 90.0 20.0 7.0 9 6 76.0 12.0 6.0 6 7 75.0 15.0 9.0 10 8 87.0 14.0 9.0 10 9 86.0 19.0 5.0 7
Пример 1. Удаление строк со значениями NaN
Мы можем использовать следующий синтаксис, чтобы удалить все строки, содержащие значения NaN:
df. dropna ()
rating points assists rebounds
1 85.0 25.0 7.0 8
4 94.0 27.0 5.0 6
5 90.0 20.0 7.0 9
6 76.0 12.0 6.0 6
7 75.0 15.0 9.0 10
8 87.0 14.0 9.0 10
9 86.0 19.0 5.0 7
Пример 2. Удаление строк со всеми значениями NaN
Мы можем использовать следующий синтаксис для удаления всех строк, содержащих все значения NaN в каждом столбце:
df. dropna (how=' all ') rating points assists rebounds 0 NaN NaN 5.0 11 1 85.0 25.0 7.0 8 2 NaN 14.0 7.0 10 3 88.0 16.0 NaN 6 4 94.0 27.0 5.0 6 5 90.0 20.0 7.0 9 6 76.0 12.0 6.0 6 7 75.0 15.0 9.0 10 8 87.0 14.0 9.0 10 9 86.0 19.0 5.0 7
В этом конкретном DataFrame не было строк со всеми значениями NaN, поэтому ни одна из строк не была удалена.
Пример 3. Удаление строк ниже определенного порога
Мы можем использовать следующий синтаксис, чтобы удалить все строки, которые не содержат хотя бы определенного количества значений, отличных от NaN:
df. dropna (thresh= 3 ) rating points assists rebounds 1 85.0 25.0 7.0 8 2 NaN 14.0 7.0 10 3 88.0 16.0 NaN 6 4 94.0 27.0 5.0 6 5 90.0 20.0 7.0 9 6 76.0 12.0 6.0 6 7 75.0 15.0 9.0 10 8 87.0 14.0 9.0 10 9 86.0 19.0 5.0 7
Самая первая строка исходного DataFrame не содержала как минимум трех значений, отличных от NaN, поэтому это была единственная строка, которая была удалена.
Пример 4. Удаление строки со значениями Nan в определенном столбце
Мы можем использовать следующий синтаксис, чтобы удалить все строки, имеющие значение NaN в определенном столбце:
df. dropna (subset=[' assists ']) rating points assists rebounds 0 NaN NaN 5.0 11 1 85.0 25.0 7.0 8 2 NaN 14.0 7.0 10 4 94.0 27.0 5.0 6 5 90.0 20.0 7.0 9 6 76.0 12.0 6.0 6 7 75.0 15.0 9.0 10 8 87.0 14.0 9.0 10 9 86.0 19.0 5.0 7
Пример 5. Сброс индекса после удаления строк с NaN.
Мы можем использовать следующий синтаксис для сброса индекса DataFrame после удаления строк со значениями NaN:
#drop all rows that have any NaN values df = df. dropna () #reset index of DataFrame df = df. reset_index (drop=True) #view DataFrame df rating points assists rebounds 0 85.0 25.0 7.0 8 1 94.0 27.0 5.0 6 2 90.0 20.0 7.0 9 3 76.0 12.0 6.0 6 4 75.0 15.0 9.0 10 5 87.0 14.0 9.0 10 6 86.0 19.0 5.0 77
Полную документацию по функции dropna() вы можете найти здесь .