Estou tentando filtrar um dataframe PySpark que tem None
como valor de linha:
df.select('dt_mvmt').distinct().collect()
[Row(dt_mvmt=u'2016-03-27'),
Row(dt_mvmt=u'2016-03-28'),
Row(dt_mvmt=u'2016-03-29'),
Row(dt_mvmt=None),
Row(dt_mvmt=u'2016-03-30'),
Row(dt_mvmt=u'2016-03-31')]
e posso filtrar corretamente com um valor de string:
df[df.dt_mvmt == '2016-03-31']
# some results here
mas isso falha:
df[df.dt_mvmt == None].count()
0
df[df.dt_mvmt != None].count()
0
Mas definitivamente existem valores em cada categoria. O que está acontecendo?
Respostas:
Você pode usar
Column.isNull
/Column.isNotNull
:Se você deseja simplesmente descartar
NULL
valores, pode usarna.drop
com osubset
argumento:Comparações baseadas em igualdade com
NULL
não funcionarão porque em SQLNULL
é indefinido, portanto, qualquer tentativa de compará-lo com outro valor retornaNULL
:O único método válido para comparar o valor
NULL
éIS
/IS NOT
que são equivalentes às chamadas de métodoisNull
/isNotNull
.fonte
__eq__
com Nenhum;) Eis
não funcionaria porque não se comporta da mesma maneira.df.filter("dt_mvmt is not NULL")
lida com ambos.Tente usar apenas a função isNotNull .
fonte
Para obter entradas cujos valores na
dt_mvmt
coluna não são nulos, temose para entradas que são nulas, temos
fonte
Se você quiser manter o syntex do Pandas, isso funcionou para mim.
fonte
se coluna = Nenhum
Use create a tentable on data frame:
Então use:
column_old_value='None'
fonte
Existem várias maneiras de remover / filtrar os valores nulos de uma coluna no DataFrame.
Vamos criar um DataFrame simples com o código abaixo:
Agora você pode tentar uma das abordagens abaixo para filtrar os valores nulos.
Você também pode verificar a seção "Trabalhando com valores NULL" no meu blog para obter mais informações.
Espero que ajude.
fonte
O PySpark oferece várias opções de filtragem com base em condições aritméticas, lógicas e outras. A presença de valores NULL pode dificultar outros processos. Removê-los ou imputá-los estatisticamente pode ser uma escolha.
O conjunto de código abaixo pode ser considerado:
fonte
Eu também tentaria:
df = df.dropna(subset=["dt_mvmt"])
fonte
Se você deseja filtrar os registros com valor Nenhum na coluna, veja o exemplo abaixo:
Agora filtre os registros de valor nulo:
Se você deseja remover esses registros do DF, veja abaixo:
fonte
None / Null é um tipo de dados da classe NoneType em pyspark / python, portanto, a seguir não funcionará, pois você está tentando comparar o objeto NoneType com o objeto string
Forma errada de filretingdf [df.dt_mvmt == Nenhum] .count () 0 df [df.dt_mvmt! = Nenhum] .count () 0
corrigir
df = df.where (col ("dt_mvmt"). isNotNull ()) retorna todos os registros com dt_mvmt como Nenhum / Nulo
fonte