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
splitsque 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
splitsy crea una columna llamadalast_name. - Suelta la columna
splitsy muestra la nuevavoter_df.
Ejercicio interactivo práctico
Prueba este ejercicio y completa 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()