Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

ОБНОВЛЕНИЕ: использование Pandas 0.22.0

Новые версии Pandas имеют новые методы: "DataFrame.isna()" и "DataFrame.notna()"

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

Ответ 2

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

Ответ 3

У меня была проблема, когда мне приходилось много столбцов визуально просматривать на экране, поэтому краткий список, который фильтрует и возвращает ошибочные столбцы,

nan_cols = [i for i in df.columns if df[i].isnull().any()]

если это кому-нибудь пригодится

Ответ 4

Я использую эти три строки кода для печати имен столбцов, которые содержат по крайней мере одно нулевое значение:

for column in dataframe:
    if dataframe[column].isnull().any():
       print('{0} has {1} null values'.format(column, dataframe[column].isnull().sum()))

Ответ 5

Оба из них должны работать:

df.isnull().sum()
df.isna().sum()

Методы DataFrame isna isna() или isnull() полностью идентичны.

Примечание: пустые строки '' считаются ложными (не считаются NA)

Ответ 6

В наборах данных, имеющих большое количество столбцов, еще лучше увидеть, сколько столбцов содержат нулевые значения, а сколько нет.

print("No. of columns containing null values")
print(len(df.columns[df.isna().any()]))

print("No. of columns not containing null values")
print(len(df.columns[df.notna().all()]))

print("Total no. of columns in the dataframe")
print(len(df.columns))

Например, в моем фрейме данных он содержал 82 столбца, из которых 19 содержали хотя бы одно нулевое значение.

Кроме того, вы также можете автоматически удалять столбцы и строки, в зависимости от того, какие значения больше нуля
Вот код, который делает это разумно:

df.drop(df.columns[df.isna().sum()>len(df.columns)],axis = 1,inplace = True)
df.dropna(axis = 0,inplace = True)

Примечание. Приведенный выше код удаляет все ваши нулевые значения. Если вы хотите нулевые значения, обработайте их раньше.