2015-04-30 4 views
1

У меня есть панды DataFrame какмногомерное логическое индексирование панды DataFrame - удалить NaN строки и столбцы

df = pd.DataFrame([[1,-2,-3],[4,5,6],[1,3,4]]) 

, который выглядит как

0 1 2 
0 1 -2 -3 
1 4 5 6 
2 1 3 4 

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

1 2 
0 -2 -3 

Я хотел бы попробовать булевое индексирование (но я не вижу, как к u се 2 мерного логическое индексирование)

In [7]: df_flag = df < 0 
In [8]: df_flag 
Out[8]: 
     0  1  2 
0 False True True 
1 False False False 
2 False False False 

Так что я сделал

In [15]: df[df_flag] 
Out[15]: 
    0 1 2 
0 NaN -2 -3 
1 NaN NaN NaN 
2 NaN NaN NaN 

Разве это не есть способ (автоматически) удалить столбцы и строки, полные NaN при использовании 2 мерных булева индексации?

+0

спасибо. Вопрос отредактирован – scls

ответ

1

Вы можете сделать 2 звонки в dropna, dropna принимает thresh из параметров, которые не упадёт всю ось, если есть n не-Na значения, так что следующие строки капли затем столбцы:

In [283]: 

df[df<0].dropna(axis=0, thresh=1).dropna(axis=1) 
Out[283]: 
    1 2 
0 -2 -3 

Результат первого dropna:

In [284]: 

df[df<0].dropna(axis=0, thresh=1) 
Out[284]: 
    0 1 2 
0 NaN -2 -3 

UPDATE

axis пары принимает несколько аргов так на самом деле вы можете сделать это один вызов, спасибо @scls:

In [285]: 

df[df<0].dropna(axis=[0,1], thresh=1) 
Out[285]: 
    1 2 
0 -2 -3 
+1

Спасибо, что я не знал о параметре 'thresh'. 'df [df> 1] .dropna (axis = [0,1], thresh = 1)' также отлично работает – scls

+0

да, это лучший ответ, обновит – EdChum

Смежные вопросы