Приведенный кадр данных для панд, содержащий возможные значения NaN, разбросанные здесь и там:
Вопрос: Как определить, какие столбцы содержат значения NaN? В частности, могу ли я получить список имен столбцов, содержащих NaN?
Приведенный кадр данных для панд, содержащий возможные значения NaN, разбросанные здесь и там:
Вопрос: Как определить, какие столбцы содержат значения NaN? В частности, могу ли я получить список имен столбцов, содержащих NaN?
ОБНОВЛЕНИЕ: использование 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
Вы можете использовать df.isnull().sum()
. Он показывает все столбцы и суммарные NaN каждой функции.
У меня была проблема, когда мне приходилось много столбцов визуально просматривать на экране, поэтому краткий список, который фильтрует и возвращает ошибочные столбцы,
nan_cols = [i for i in df.columns if df[i].isnull().any()]
если это кому-нибудь пригодится
Я использую эти три строки кода для печати имен столбцов, которые содержат по крайней мере одно нулевое значение:
for column in dataframe:
if dataframe[column].isnull().any():
print('{0} has {1} null values'.format(column, dataframe[column].isnull().sum()))
Оба из них должны работать:
df.isnull().sum()
df.isna().sum()
Методы DataFrame isna isna()
или isnull()
полностью идентичны.
Примечание: пустые строки ''
считаются ложными (не считаются NA)
В наборах данных, имеющих большое количество столбцов, еще лучше увидеть, сколько столбцов содержат нулевые значения, а сколько нет.
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)
Примечание. Приведенный выше код удаляет все ваши нулевые значения. Если вы хотите нулевые значения, обработайте их раньше.