2016-11-17 2 views
2

Я пытаюсь отфильтровать dataframe всеми никами. Мой df:Python Pandas Filter Zero cell

Name Fruit Total 
0 Steve Orange 0 
1 Bob  Apple 15 
2 Cindy Grapes 27 
3 Grant Orange 37 

Я хочу удалить Стив из данных DF. Новое для Панд здесь, но я пробовал это, и он, похоже, не работает. Я попытался взглянуть на документы для loc, но я думаю, что мне не хватает чего-то здесь, как использовать loc.

df.loc[(df!=0).any(axis=1)] 

Это всего лишь образец. Я хочу удалить все Тоталы, которые равны нулю.

+1

Если фильтрация только на основе столбца 'Total', вы можете сделать:' ФР [df.Total ! = 0] ' – Psidom

ответ

2

Использование boolean indexing:

print (df[~(df==0).any(axis=1)]) 
    Name Fruit Total 
1 Bob Apple  15 
2 Cindy Grapes  27 
3 Grant Orange  37 

Но если только числовой является столбец Total использование:

df[df.Total != 0] 

Объяснение:

Если в DataFrame является более числовые столбцы - так что вы можете получить 0 не только в последней колонке, но и в чужих, используйте:

Сначала сравнить все значения с 0 - получить boolean DataFrame:

print (df==0) 
    Name Fruit Total 
0 False False True 
1 False False False 
2 False False False 
3 False False False 

Если нужно найти по крайней мере один True (0) в столбцы нужно any с axis=0:

print ((df==0).any(axis=0)) 
Name  False 
Fruit False 
Total  True 
dtype: bool 

Но если нужно, по крайней мере один True (0) в строки добавить axis=1:

print ((df==0).any(axis=1)) 
0  True 
1 False 
2 False 
3 False 
dtype: bool 

Invert boolean Series по ~:

print (~(df==0).any(axis=1)) 
0 False 
1  True 
2  True 
3  True 
dtype: bool 

и использовать boolean indexing:

print (df[~(df==0).any(axis=1)]) 
    Name Fruit Total 
1 Bob Apple  15 
2 Cindy Grapes  27 
3 Grant Orange  37 
+0

Это сработало Спасибо. Не возражаете, если я спрошу, что делает, и почему я устанавливаю ось на 1 –

+1

. Проверьте мои изменения. – jezrael

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