Modificar columnas del Marco de datos
Antes, filtrabas las filas que no se ajustaban a algo parecido a un nombre. Ahora, basándote en tu trabajo anterior, tu jefe te ha pedido que crees dos nuevas columnas: first_name
y last_name
. Te pide que dividas la columna VOTER_NAME
en palabras sobre cualquier carácter de espacio. Tratarás la última palabra como last_name
, y todas las demás como first_name
. En este ejercicio utilizarás algunas funciones nuevas, como .split()
, .size()
y .getItem()
. La dirección .getItem(index)
toma un valor entero para devolver el elemento de la columna con el número correspondiente. Las funciones .split()
y .size()
están en la biblioteca pyspark.sql.functions
.
Ten en cuenta que estas operaciones son siempre algo específico del caso de uso. Que tus datos se ajusten a un formato a menudo importa más que los detalles concretos del formato. Rara vez una tarea de limpieza de datos está pensada sólo para una persona: ajustarse a un formato definido permite compartir más fácilmente los datos más adelante (es decir, Paul no tiene que preocuparse de los nombres: Mary ya ha limpiado el conjunto de datos).
El DataFrame de votantes filtrado de tu ejercicio anterior está disponible en voter_df
. La biblioteca pyspark.sql.functions
está disponible con el alias F
.
Este ejercicio forma parte del curso
Limpiar datos con PySpark
Instrucciones del ejercicio
- Añade una nueva columna llamada
splits
que contenga la lista de nombres posibles. - Utiliza el método
getItem()
y crea una nueva columna llamadafirst_name
. - Obtén la última entrada de la lista
splits
y crea una columna llamadalast_name
. - Suelta la columna
splits
y muestra la nuevavoter_df
.
Ejercicio interactivo práctico
Prueba este ejercicio completando el código de muestra.
# Add a new column called splits separated on whitespace
voter_df = voter_df.withColumn(____, F.____(voter_df.VOTER_NAME, '\s+'))
# Create a new column called first_name based on the first item in splits
voter_df = voter_df.withColumn(____, voter_df.splits.getItem(____)
# Get the last entry of the splits list and create a column called last_name
voter_df = voter_df.withColumn(____, voter_df.splits.getItem(F.____('splits') - ____))
# Drop the splits column
voter_df = voter_df.____('splits')
# Show the voter_df DataFrame
voter_df.show()