Eu tenho um df de dataframe:
>>> df
sales discount net_sales cogs
STK_ID RPT_Date
600141 20060331 2.709 NaN 2.709 2.245
20060630 6.590 NaN 6.590 5.291
20060930 10.103 NaN 10.103 7.981
20061231 15.915 NaN 15.915 12.686
20070331 3.196 NaN 3.196 2.710
20070630 7.907 NaN 7.907 6.459
Então eu quero soltar linhas com certos números de sequência indicados em uma lista, suponha que aqui fique o seguinte [1,2,4],
:
sales discount net_sales cogs
STK_ID RPT_Date
600141 20060331 2.709 NaN 2.709 2.245
20061231 15.915 NaN 15.915 12.686
20070630 7.907 NaN 7.907 6.459
Como ou que função pode fazer isso?
Respostas:
Use DataFrame.drop e passe uma série de rótulos de índice:
fonte
axis=0
(0 = linhas, 1 = colunas) einplace=True
como emdf.drop(df.index[[1,3]], axis=0, inplace=True)
. @mezzanaccio, se você especificamente saber quais índices que deseja substituir (e também usando o seu 0 a n exemplo):df.drop(df.index[range(0, n)], axis=0, inplace=True)
Observe que pode ser importante usar o comando "inplace" quando você quiser fazer o drop in line.
Como sua pergunta original não está retornando nada, esse comando deve ser usado. http://pandas.pydata.org/pandas-docs/version/0.17.0/generated/pandas.DataFrame.drop.html
fonte
Se o DataFrame for enorme e o número de linhas a serem descartadas também for grande, a simples remoção por índice
df.drop(df.index[])
leva muito tempo.No meu caso, tenho um DataFrame multi-indexado de floats
100M rows x 3 cols
e preciso remover10k
linhas dele. O método mais rápido que encontrei é, de maneira bastante intuitiva, paratake
as linhas restantes.Let
indexes_to_drop
Ser uma matriz de índices posicionais para cair ([1, 2, 4]
na questão).No meu caso, isso levou
20.5s
, enquanto o simplesdf.drop
pegou5min 27s
e consumiu muita memória. O DataFrame resultante é o mesmo.fonte
Você também pode passar para DataFrame.drop o próprio rótulo (em vez de Série de rótulos de índice):
O que equivale a:
fonte
Eu resolvi isso de uma maneira mais simples - apenas em 2 etapas.
Etapa 1: primeiro forme um quadro de dados com linhas / dados indesejados.
Etapa 2: use o índice desse quadro de dados indesejado para eliminar as linhas do quadro de dados original.
Exemplo:
Suponha que você tenha um dataframe df com tantas colunas, incluindo 'Age', que é um número inteiro. Agora, digamos que você queira descartar todas as linhas com 'Idade' como número negativo.
Etapa 1: df_age_negative = df [df ['Idade'] <0]
Etapa 2: df = df.drop (df_age_negative.index, axis = 0)
Espero que isso seja muito mais simples e ajude você.
fonte
Se eu quiser soltar uma linha que tenha digamos index
x
, eu faria o seguinte:Se eu quiser soltar vários índices (digamos que esses índices estejam na lista
unwanted_indices
), eu faria:fonte
Aqui está um exemplo um pouco específico, eu gostaria de mostrar. Digamos que você tenha muitas entradas duplicadas em algumas de suas linhas. Se você tiver entradas de sequência, poderá facilmente usar métodos de sequência para encontrar todos os índices a serem descartados.
E agora para descartar essas linhas usando seus índices
fonte
Em um comentário à resposta de @ theodros-zelleke, @ j-jones perguntou sobre o que fazer se o índice não for único. Eu tive que lidar com essa situação. O que fiz foi renomear as duplicatas no índice antes de
drop()
ligar para:onde
rename_duplicates()
é uma função que eu defini que passou pelos elementos do índice e renomeou as duplicatas. Usei o mesmo padrão de renomeaçãopd.read_csv()
usado nas colunas, ou seja,"%s.%d" % (name, count)
ondename
está o nome da linha ecount
quantas vezes ocorreu anteriormente.fonte
Determinando o índice a partir do booleano, conforme descrito acima, por exemplo
pode consumir mais memória do que determinar o índice usando esse método
aplicado assim
Este método é útil ao lidar com quadros de dados grandes e memória limitada.
fonte
Use apenas o argumento Argumento para descartar a linha: -
Para várias linhas: -
fonte
Considere um exemplo de quadro de dados
queremos soltar a segunda e a terceira linhas de índice.
Abordagem 1:
Abordagem 2
fonte