Как найти, какие столбцы содержат любое значение NaN в Pandas dataframe (python)


учитывая фрейм данных pandas, содержащий (возможно) значения NaN, разбросанные здесь и там:

вопрос: как определить, какие столбцы содержат значения NaN? В частности, могу ли я получить список имен столбцов, содержащих NaNs?

спасибо

2 54

2 ответа:

обновление: использование панд 0.22.0

новые версии панд имеют новые методы 'DataFrame.isna ()' и 'DataFrame.нотна()'

In [71]: df
Out[71]:
     a    b  c
0  NaN  7.0  0
1  0.0  NaN  4
2  2.0  NaN  4
3  1.0  7.0  0
4  1.0  3.0  9
5  7.0  4.0  9
6  2.0  6.0  9
7  9.0  6.0  4
8  3.0  0.0  9
9  9.0  0.0  1

In [72]: df.isna().any()
Out[72]:
a     True
b     True
c    False
dtype: bool

как список столбцов:

In [74]: df.columns[df.isna().any()].tolist()
Out[74]: ['a', 'b']

чтобы выбрать эти столбцы (содержащие хотя бы один NaN значение):

In [73]: df.loc[:, df.isna().any()]
Out[73]:
     a    b
0  NaN  7.0
1  0.0  NaN
2  2.0  NaN
3  1.0  7.0
4  1.0  3.0
5  7.0  4.0
6  2.0  6.0
7  9.0  6.0
8  3.0  0.0
9  9.0  0.0

ответ:

попробуйте использовать isnull ():

In [97]: df
Out[97]:
     a    b  c
0  NaN  7.0  0
1  0.0  NaN  4
2  2.0  NaN  4
3  1.0  7.0  0
4  1.0  3.0  9
5  7.0  4.0  9
6  2.0  6.0  9
7  9.0  6.0  4
8  3.0  0.0  9
9  9.0  0.0  1

In [98]: pd.isnull(df).sum() > 0
Out[98]:
a     True
b     True
c    False
dtype: bool

или как @ root предложенный более четкий вариант:

In [5]: df.isnull().any()
Out[5]:
a     True
b     True
c    False
dtype: bool

In [7]: df.columns[df.isnull().any()].tolist()
Out[7]: ['a', 'b']

чтобы выбрать подмножество-все столбцы, содержащие хотя бы один NaN значение:

In [31]: df.loc[:, df.isnull().any()]
Out[31]:
     a    b
0  NaN  7.0
1  0.0  NaN
2  2.0  NaN
3  1.0  7.0
4  1.0  3.0
5  7.0  4.0
6  2.0  6.0
7  9.0  6.0
8  3.0  0.0
9  9.0  0.0

можно использовать df.isnull().sum(). Он показывает все столбцы и общие NaN каждой функции.