Saltar al contenido

¿Cómo encontrar el recuento de valores Null y Nan para cada columna en un marco de datos PySpark de manera eficiente?

Queremos brindarte la mejor solución que hallamos online. Nuestro deseo es que te sirva de ayuda y si quieres comentarnos alguna mejora hazlo libremente.

Solución:

Puede usar el método que se muestra aquí y reemplazar isNull con isnan:

from pyspark.sql.functions import isnan, when, count, col

df.select([count(when(isnan(c), c)).alias(c) for c in df.columns]).show()
+-------+----------+---+
|session|timestamp1|id2|
+-------+----------+---+
|      0|         0|  3|
+-------+----------+---+

o

df.select([count(when(isnan(c) | col(c).isNull(), c)).alias(c) for c in df.columns]).show()
+-------+----------+---+
|session|timestamp1|id2|
+-------+----------+---+
|      0|         0|  5|
+-------+----------+---+

Para asegurarse de que no falla para string, date y timestamp columnas:

import pyspark.sql.functions as F
def count_missings(spark_df,sort=True):
    """
    Counts number of nulls and nans in each column
    """
    df = spark_df.select([F.count(F.when(F.isnan(c) | F.isnull(c), c)).alias(c) for (c,c_type) in spark_df.dtypes if c_type not in ('timestamp', 'string', 'date')]).toPandas()

    if len(df) == 0:
        print("There are no any missing values!")
        return None

    if sort:
        return df.rename(index=0: 'count').T.sort_values("count",ascending=False)

    return df

Si desea ver las columnas ordenadas según el número de nans y nulos en forma descendente:

count_missings(spark_df)

# | Col_A | 10 |
# | Col_C | 2  |
# | Col_B | 1  | 

Si no desea ordenar y verlos como una sola fila:

count_missings(spark_df, False)
# | Col_A | Col_B | Col_C |
# |  10   |   1   |   2   |

Aquí está mi única línea. Aquí 'c' es el nombre de la columna

df.select('c').withColumn('isNull_c',F.col('c').isNull()).where('isNull_c = True').count()

Aquí tienes las reseñas y calificaciones

Si para ti ha resultado de ayuda nuestro post, te agradeceríamos que lo compartas con el resto juniors de este modo nos ayudas a difundir esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada.