Закрыть, вам нужно DataFrame.query
, но при необходимости работать с Series.isna
добавить параметр engine='python'
:
df = pd.DataFrame({
'A':list('abcdef'),
'col_1':[np.nan,5,4,5,5,4],
'C':[7,8,9,4,2,3],
'col_2':[np.nan,3,5,7,1,np.nan],
'E':[5,3,6,9,2,4],
'F':list('aaabbb')
})
print (df)
A col_1 C col_2 E F
0 a NaN 7 NaN 5 a
1 b 5.0 8 3.0 3 a
2 c 4.0 9 5.0 6 a
3 d 5.0 4 7.0 9 b
4 e 5.0 2 1.0 2 b
5 f 4.0 3 NaN 4 b
str_a = 'col_1.isna()'
str_b = ' & '
str_c = 'col_2.isna()'
str_tot = str_a + str_b + str_c
print (str_tot)
col_1.isna() & col_2.isna()
print (df.query(str_tot, engine='python'))
A col_1 C col_2 E F
0 a NaN 7 NaN 5 a
Другая идея - это факт использования np.nan == np.nan
- это False
, документы :
str_a = '(col_1 != col_1)'
str_b = ' & '
str_c = '(col_2 != col_2)'
str_tot = str_a + str_b + str_c
print (str_tot)
(col_1 != col_1) & (col_2 != col_2)
print (df.query(str_tot))
A col_1 C col_2 E F
0 a NaN 7 NaN 5 a