Как найти, какие столбцы содержат любое значение NaN в Pandas dataframe (python)
учитывая фрейм данных pandas, содержащий (возможно) значения NaN, разбросанные здесь и там:
вопрос: как определить, какие столбцы содержат значения NaN? В частности, могу ли я получить список имен столбцов, содержащих NaNs?
спасибо
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