Eu tenho isso DataFrame
e quero apenas os registros cuja EPS
coluna não é NaN
:
>>> df
STK_ID EPS cash
STK_ID RPT_Date
601166 20111231 601166 NaN NaN
600036 20111231 600036 NaN 12
600016 20111231 600016 4.3 NaN
601009 20111231 601009 NaN NaN
601939 20111231 601939 2.5 NaN
000001 20111231 000001 NaN NaN
... ou seja, algo como df.drop(....)
obter esse quadro de dados resultante:
STK_ID EPS cash
STK_ID RPT_Date
600016 20111231 600016 4.3 NaN
601939 20111231 601939 2.5 NaN
Como faço isso?
df.dropna(subset = ['column1_name', 'column2_name', 'column3_name'])
Respostas:
Não deixe cair, apenas pegue as linhas onde o EPS não é NA:
fonte
pandas.notnull
vez denp.isfinite
EPS
no exemplo) contiver seqüências de caracteres ou outros tipos que não podem ser digeridosnp.isfinite()
. Eu recomendo usarpandas.notnull()
isso que irá lidar com isso de forma mais generosa.Esta questão já está resolvida, mas ...
... considere também a solução sugerida por Wouter em seu comentário original . A capacidade de lidar com dados ausentes, inclusive
dropna()
, é explicitamente incorporada aos pandas. Além do desempenho potencialmente aprimorado, em vez de fazê-lo manualmente, essas funções também vêm com uma variedade de opções que podem ser úteis.Também existem outras opções (consulte os documentos em http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html ), incluindo a remoção de colunas em vez de linhas.
Muito útil!
fonte
df.dropna(subset = ['column_name'])
. Espero que economize pelo menos uma pessoa os 5 segundos extras do que estou fazendo de errado. Ótima resposta, +1df.dropna(subset = ['column_name'])
é exatamente o que eu estava procurando! Obrigado!Eu sei que isso já foi respondido, mas apenas por uma solução puramente panda para essa pergunta específica, em oposição à descrição geral de Aman (que foi maravilhosa) e no caso de mais alguém acontecer com isso:
fonte
df.dropna(subset=['EPS'])
(com base na descrição geral da Aman, é claro que isso faz também o trabalho)notnull
é também o que Wes (autor de Pandas) sugeriu em seu comentário sobre outra resposta.df[pd.notnull(df[df.columns[INDEX]])]
ondeINDEX
seria a coluna numerada se não souber o nomeVocê pode usar isto:
fonte
how='all'
é redundante aqui, porque você define o quadro de dados apenas com um campo para ambos'all'
e'any'
terá o mesmo efeito.Mais simples de todas as soluções:
fonte
Você pode usar o método dataframe notnull ou inverso de isnull ou numpy.isnan :
fonte
Maneira simples e fácil
df.dropna(subset=['EPS'],inplace=True)
fonte: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.dropna.html
fonte
inplace=True
é um tópico bizarro e não tem efeitoDataFrame.dropna()
. Veja: github.com/pandas-dev/pandas/issues/16529ainda outra solução que usa o fato de que
np.nan != np.nan
:fonte
Outra versão:
fonte
Series.notna()
?Em conjuntos de dados com grande número de colunas, é ainda melhor ver quantas colunas contêm valores nulos e quantas não.
Por exemplo, no meu dataframe, ele continha 82 colunas, das quais 19 continham pelo menos um valor nulo.
Além disso, você também pode remover automaticamente colunas e linhas, dependendo de quais possuem mais valores nulos.
Aqui está o código que faz isso de forma inteligente:
Nota: O código acima remove todos os seus valores nulos. Se você deseja valores nulos, processe-os antes.
fonte
Pode ser adicionado em que '&' pode ser usado para adicionar condições adicionais, por exemplo
Observe que, ao avaliar as declarações, os pandas precisam de parênteses.
fonte
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
. Você precisa adicionar parênteses -df = df[(df.EPS > 2.0) & (df.EPS <4.0)]
, mas também não é resposta para esta pergunta.Por alguma razão, nenhuma das respostas enviadas anteriormente funcionou para mim. Esta solução básica fez:
Embora, é claro, isso também elimine linhas com números negativos. Então, se você quiser, provavelmente também será bom adicionar isso depois.
fonte
Uma das soluções pode ser
Outra maneira pode ser
Espero que sejam úteis.
fonte