HOWTO · Pandas

Pandas Remover Linhas

Este tutorial explica como remover linhas de um DataFrame do pandas usando o método pandas.DataFrame.drop().

Nesta página

Este tutorial mostra como remover linhas de um DataFrame do pandas com pandas.DataFrame.drop(). Os valores passados a drop() são rótulos do índice. Com o índice inteiro padrão, os rótulos muitas vezes se parecem com posições das linhas, mas um rótulo não é necessariamente uma posição. Os exemplos a seguir mostram como selecionar rótulos diretamente, converter posições em rótulos e remover linhas que correspondem a uma condição baseada em uma coluna.

Execute este exemplo:

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

import pandas as pd

people = pd.DataFrame(
    {"Name": ["Himansh", "Prateek", "Abhishek", "Vidit", "Anupam"],
     "Age": [30, 33, 35, 30, 30]}
)
remaining = people.drop([0, 2])
print(remaining)

Remover linhas por rótulos do índice

Passe um rótulo ou uma lista de rótulos para drop(). No exemplo acima, o índice padrão vai de 0 a 4; por isso, os rótulos 0 e 2 identificam a primeira e a terceira linhas. O DataFrame retornado mantém os rótulos originais das linhas restantes; o pandas não os renumera automaticamente. Use reset_index(drop=True) se um novo índice consecutivo for útil nas etapas seguintes.

Para um índice personalizado, passe os rótulos que ele realmente contém. Este exemplo independente usa nomes como rótulos; portanto, "A" e "C" selecionam a primeira e a terceira entradas somente porque esses rótulos foram atribuídos a essas linhas:

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

import pandas as pd

people = pd.DataFrame(
    {"Name": ["Himansh", "Prateek", "Abhishek", "Vidit", "Anupam"],
     "Age": [30, 33, 35, 30, 30]},
    index=["A", "B", "C", "D", "E"],
)
remaining = people.drop(["A", "C"])
print(remaining)

Um rótulo ausente gera um KeyError por padrão. Se os rótulos forem opcionais, passe errors="ignore" para ignorar os que não estiverem presentes; use essa opção com cuidado, pois ela também pode ocultar um rótulo digitado incorretamente.

Remover linhas por posição

drop() aceita rótulos, não posições de linhas. Para remover linhas por posição, contando a partir de zero, primeiro selecione essas posições no índice e, em seguida, passe os rótulos resultantes para drop(). Essa distinção importa quando o índice é personalizado ou foi reordenado. O exemplo é independente:

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

import pandas as pd

people = pd.DataFrame(
    {"Name": ["Himansh", "Prateek", "Abhishek", "Vidit", "Anupam"],
     "Age": [30, 33, 35, 30, 30]},
    index=["A", "B", "C", "D", "E"],
)
positions = [0, 2]
labels = people.index.take(positions)
remaining = people.drop(labels)
print(remaining)

Aqui, as posições 0 e 2 são convertidas nos rótulos "A" e "C" antes da remoção. Se você já conhece os rótulos, use-os diretamente, como na seção anterior. Também é possível expressar a seleção por posição com iloc quando o objetivo é manter as linhas selecionadas, em vez de removê-las.

Remover linhas com base nos valores de uma coluna

Para remover linhas que correspondem a uma condição, encontre os rótulos delas no índice e passe esses rótulos para drop(). Neste exemplo, a condição seleciona idades menores ou iguais a 33; por isso, o DataFrame resultante mantém as pessoas com mais de 33 anos:

O código e os rótulos ou saídas exibidos nesta seção permanecem em inglês.

import pandas as pd

people = pd.DataFrame(
    {"Name": ["Himansh", "Prateek", "Abhishek", "Vidit", "Anupam"],
     "Age": [31, 33, 35, 36, 34]},
    index=["A", "B", "C", "D", "E"],
)
remove_labels = people.index[people["Age"] <= 33]
remaining = people.drop(remove_labels)
print(remaining)

Essa abordagem é útil quando a condição identifica as linhas a remover. Se for mais claro descrever quais linhas manter, use uma filtragem booleana, como people[people["Age"] > 33]. Neste caso, as duas abordagens retornam as mesmas linhas restantes; a filtragem pode ser mais fácil de entender quando a regra para manter linhas é a ideia principal.

Entenda o comportamento de DataFrame.drop() e os erros comuns

pandas.DataFrame.drop() retorna um novo DataFrame por padrão e deixa o objeto original inalterado. Atribua o resultado, como em cada exemplo, ou use o valor retornado em uma expressão posterior. A opção inplace=True altera o objeto original e retorna None; em geral, uma atribuição como people = people.drop(...) é mais clara porque deixa o resultado explícito.

Por padrão, drop() remove rótulos do índice. Para rótulos de colunas, especifique axis="columns" (ou columns=[...]); este artigo trata de rótulos de linhas. Lembre-se de que, com um índice inteiro padrão, os rótulos podem se parecer com posições, enquanto um índice personalizado deixa a diferença evidente. Se o resultado surpreender, confira people.index, verifique se a condição seleciona as linhas que você pretende remover e confirme que guardou o valor retornado por drop().