Каков правильный синтаксис при использовании.notnull() в Пандах?

Я хочу использовать .notnull() на нескольких столбцах фрейма данных, чтобы исключить строки, содержащие значения "NaN".

скажем у меня есть следующие df:

  A   B   C
0 1   1   1
1 1   NaN 1
2 1   NaN NaN
3 NaN 1   1

Я пытался использовать этот синтаксис, но это не работает? знаешь, что я делаю не так?

df[[df.A.notnull()],[df.B.notnull()],[df.C.notnull()]]

Я получаю эту ошибку:

TypeError: 'Series' objects are mutable, thus they cannot be hashed

что я должен сделать, чтобы получить следующие результаты?

  A   B   C
0 1   1   1

есть идеи?

2 ответов


вы можете сначала выбрать подмножество столбцов по df[['A','B','C']], а затем применить notnull и выбрать all значения в маски True:

print (df[['A','B','C']].notnull())
       A      B      C
0   True   True   True
1   True  False   True
2   True  False  False
3  False   True   True

print (df[['A','B','C']].notnull().all(1))
0     True
1    False
2    False
3    False
dtype: bool

print (df[df[['A','B','C']].notnull().all(1)])
     A    B    C
0  1.0  1.0  1.0

другое решение-с Ayhan комментарий dropna:

print (df.dropna(subset=['A', 'B', 'C']))
     A    B    C
0  1.0  1.0  1.0

что же, что:

print (df.dropna(subset=['A', 'B', 'C'], how='any'))

и означает падение всех строк, где есть хотя бы один NaN значение.


вы можете применить несколько условий, комбинируя их с & оператор (это работает не только для