Eu tenho o seguinte DataFrame:
daysago line_race rating rw wrating
line_date
2007-03-31 62 11 56 1.000000 56.000000
2007-03-10 83 11 67 1.000000 67.000000
2007-02-10 111 9 66 1.000000 66.000000
2007-01-13 139 10 83 0.880678 73.096278
2006-12-23 160 10 88 0.793033 69.786942
2006-11-09 204 9 52 0.636655 33.106077
2006-10-22 222 8 66 0.581946 38.408408
2006-09-29 245 9 70 0.518825 36.317752
2006-09-16 258 11 68 0.486226 33.063381
2006-08-30 275 8 72 0.446667 32.160051
2006-02-11 475 5 65 0.164591 10.698423
2006-01-13 504 0 70 0.142409 9.968634
2006-01-02 515 0 64 0.134800 8.627219
2005-12-06 542 0 70 0.117803 8.246238
2005-11-29 549 0 70 0.113758 7.963072
2005-11-22 556 0 -1 0.109852 -0.109852
2005-11-01 577 0 -1 0.098919 -0.098919
2005-10-20 589 0 -1 0.093168 -0.093168
2005-09-27 612 0 -1 0.083063 -0.083063
2005-09-07 632 0 -1 0.075171 -0.075171
2005-06-12 719 0 69 0.048690 3.359623
2005-05-29 733 0 -1 0.045404 -0.045404
2005-05-02 760 0 -1 0.039679 -0.039679
2005-04-02 790 0 -1 0.034160 -0.034160
2005-03-13 810 0 -1 0.030915 -0.030915
2004-11-09 934 0 -1 0.016647 -0.016647
Eu preciso remover as linhas onde line_race
é igual a 0
. Qual é a maneira mais eficiente de fazer isso?
Respostas:
Se estou entendendo corretamente, deve ser tão simples quanto:
fonte
df
for grande? Ou posso fazê-lo no local?df
com 2M linhas e foi muito rápido.df = df[df['line race'] != 0]
df=df[~df['DATE'].isin(['2015-10-30.1', '2015-11-30.1', '2015-12-31.1'])]
Mas para futuros ignorantes, você poderia mencionar que
df = df[df.line_race != 0]
não faz nada ao tentar filtrar porNone
/ valores ausentes.Funciona:
Não faz nada:
Funciona:
fonte
df = df[df.columns[2].notnull()]
, mas de uma forma ou de outra você precisa ser capaz de indexar a coluna de alguma forma.df = df[df.line_race != 0]
descarta as linhas, mas também não redefine o índice. Portanto, quando você adiciona outra linha no df, ela pode não ser adicionada no final. Eu recomendo redefinir o índice após essa operação (df = df.reset_index(drop=True)
)==
operador para iniciar. stackoverflow.com/questions/3257919/…A melhor maneira de fazer isso é com o mascaramento booleano:
ATUALIZAÇÃO: Agora que o pandas 0.13 está lançado, outra maneira de fazer isso é
df.query('line_race != 0')
.fonte
query
. Ele permite critérios de seleção mais ricos (por exemplo, operações de conjunto, comodf.query('variable in var_list')
onde 'var_list' é uma lista dos valores desejados)query
não é muito útil se o nome da coluna tiver um espaço nela.df = df.rename(columns=lambda x: x.strip().replace(' ','_'))
apenas para adicionar outra solução, particularmente útil se você estiver usando os novos avaliadores de pandas, outras soluções substituirão os pandas originais e perderão os avaliadores
fonte
.reset_index()
também se alguém acabar usando acessadores de índiceSe você deseja excluir linhas com base em vários valores da coluna, você pode usar:
Para eliminar todas as linhas com os valores 0 e 10 para
line_race
.fonte
drop = [0, 10]
e algo comodf[(df.line_race != drop)]
A resposta dada está correta, no entanto, como alguém acima disse que você pode usar o
df.query('line_race != 0')
que, dependendo do seu problema, é muito mais rápido. Altamente recomendado.fonte
DataFrame
nomes de variáveis longos como eu (e, arrisco-me a adivinhar, todo mundo em comparação com odf
usado para exemplos), porque você só precisa escrevê-lo uma vez.Embora a resposta anterior seja quase semelhante ao que vou fazer, mas o uso do método index não requer o uso de outro método de indexação .loc (). Isso pode ser feito de maneira semelhante, mas precisa, como
fonte
Outra maneira de fazer isso. Pode não ser a maneira mais eficiente, pois o código parece um pouco mais complexo que o código mencionado em outras respostas, mas ainda assim é uma maneira alternativa de fazer a mesma coisa.
fonte
Compilei e executei meu código. Este é um código preciso. Você pode tentar por conta própria.
Se você tiver algum caractere ou espaço especial no nome da coluna, poderá escrevê-lo
''
como no código fornecido:Se houver apenas um nome de coluna de sequência única sem nenhum espaço ou caractere especial, você poderá acessá-lo diretamente.
fonte
Apenas adicionando outra maneira para o DataFrame expandido em todas as colunas:
Exemplo:
fonte