PySpark: Cómo eliminar una columna de un DataFrame
En PySpark, podemos eliminar una o más columnas de un DataFrame utilizando el método .drop("column_name") para una sola columna o .drop(["column1", "column2", ...]) para varias columnas.
La limpieza y la preparación de los datos son pasos esenciales en cualquier proyecto de machine learning o ciencia de datos. Para garantizar la calidad y la fiabilidad de nuestros datos, tenemos que identificar y abordar las incoherencias, los errores y los valores que faltan.
PySpark es especialmente útil cuando trabajamos con grandes conjuntos de datos, porque proporciona métodos eficientes para limpiar nuestro conjunto de datos. En este artículo, nos centraremos en una tarea de limpieza habitual: cómo eliminar columnas de un DataFrame utilizando los métodos de PySpark .drop() y .select().
¿Por qué eliminar columnas en los DataFrames de PySpark?
Eliminar columnas es una tarea habitual en el preprocesamiento de datos por diversas razones. Eliminar columnas innecesarias o irrelevantes puede reducir significativamente la cantidad de datos que debemos procesar. Esto optimiza nuestro conjunto de datos, facilita su análisis y puede aumentar el rendimiento de nuestros trabajos PySpark.
Además, al preparar los datos para los modelos de machine learning, la selección de características suele implicar la eliminación de columnas que no contribuyen a la exactitud del modelo o que podrían introducir ruido. Este paso puede conducir a modelos más eficientes y eficaces.
Por último, eliminar columnas puede ser una estrategia para mejorar la calidad de los datos. Si una columna contiene un alto porcentaje de valores que faltan o datos erróneos, eliminarla puede ser la mejor opción.
Cómo eliminar una sola columna de un DataFrame PySpark
Supongamos que tenemos un DataFrame df con cinco columnas: player_name, player_position, team, minutes_played y score. La columna minutes_played tiene muchos valores que faltan, por lo que queremos eliminarla.
En PySpark, podemos eliminar una sola columna de un DataFrame utilizando el método .drop().
La sintaxis es df.drop("column_name"), donde:
df es el DataFrame del que queremos eliminar la columna
column_name es el nombre de la columna que hay que eliminar
El método df.drop() devuelve un nuevo DataFrame con las columnas especificadas eliminadas.
Cómo eliminar varias columnas de un DataFrame PySpark
Imaginemos que queremos analizar nuestro DataFrame df, pero no queremos tener en cuenta el equipo ni la posición del jugador, por lo que queremos eliminar ambas columnas. Hay más de una forma de hacerlo, así que vamos a explorar nuestras opciones.
Para eliminar varias columnas de un DataFrame PySpark, podemos pasar una lista de nombres de columnas al método .drop(). Podemos hacerlo de dos maneras:
# Option 1: Passing the names as a list
df_dropped = df.drop(["team","player_position"])# Option 2: Passing the names as separate arguments
df_dropped = df.drop("team","player_position")Con la tecnología de
También podemos encadenar varias llamadas a .drop(). Aunque este enfoque es técnicamente funcional, no se suele considerar el más eficiente o elegante. Cada llamada crea un nuevo DataFrame, lo que puede introducir sobrecarga, especialmente cuando se trabaja con conjuntos de datos grandes.
En lugar de especificar qué columnas eliminar, podemos invertir el método y seleccionar solo las que cumplan una condición o un requisito. De este modo, nuestro DataFrame devuelto ya no contendrá las columnas no deseadas.
Utilizar .select()
Podemos utilizar el método .select() de PySpark junto con una comprensión de listas para eliminar una o más columnas en función de determinados criterios. El método es flexible, y podemos utilizarlo con una condición sencilla o compleja.
Este método sigue la sintaxis df.select([col for col in df.columns if condition]), donde:
df es el DataFrame con el que estás trabajando.
condition es el criterio utilizado para filtrar las columnas que quieres conservar.
Trabajemos de nuevo con nuestro DataFrame df y seleccionemos todas las columnas menos la columna team:
df_sel = df.select([col for col in df.columns if col !="team"])Con la tecnología de
Condiciones complejas con .selectExpr()
Si manejamos bien SQL y tenemos que aplicar condiciones más complejas al filtrar columnas, el método .selectExpr() de PySpark ofrece una potente solución. Nos permite utilizar expresiones similares a SQL para seleccionar y manipular columnas directamente en nuestro código PySpark.
Veamos este ejemplo:
# Select specific columns and create a new 'FullMatch' column
df_sel = df.selectExpr("player_name","player_position","minutes_played >= 60 as FullMatch")Con la tecnología de
Aquí no solo excluimos una columna. Estamos haciendo lo siguiente:
Seleccionar las columnas player_name y player_position.
Crear una nueva columna llamada FullMatch que indica si un jugador ha jugado un partido completo (60 minutos o más).
Esta flexibilidad hace que .selectExpr() tenga un valor incalculable para situaciones en las que las simples comprensiones de listas no sean suficientes.
Prácticas recomendadas
Cuando decidamos eliminar columnas de nuestro DataFrame, seguir algunas prácticas recomendadas es crucial para mantener la integridad de los datos, la legibilidad del código y la eficiencia.
1. Haz una copia de seguridad de tus datos: Antes de realizar cualquier modificación en tu DataFrame, especialmente al eliminar columnas, es conveniente crear una copia de seguridad. Esto garantiza que puedas volver a los datos originales si es necesario.
df_backup = df.persist()# Cache the DataFrame to avoid recomputing it laterCon la tecnología de
2. Elimina con inplace=False (de forma predeterminada): De forma predeterminada, el método .drop() devuelve un nuevo DataFrame sin modificar el original. En general, esto es más seguro. Si no tienes ninguna duda de que quieres modificar el DataFrame original, puedes utilizar inplace=True, pero ten cuidado.
df_dropped = df.drop("column_to_drop", inplace=False)# Default behaviorCon la tecnología de
3. Documenta tus decisiones: Si estás trabajando en un proyecto colaborativo o prevés que volverás a usar tu código en el futuro, es útil añadir comentarios que expliquen por qué has decidido eliminar determinadas columnas. Esta documentación puede proporcionar un contexto valioso para ti y para los demás.
4. Considera la posibilidad de cambiar el nombre de las columnas: En lugar de eliminar columnas, debemos plantearnos si cambiarles el nombre sería más adecuado, sobre todo si la información que contienen puede ser valiosa para futuros análisis. PySpark nos proporciona el método .withColumnRenamed(), que nos ayuda a cambiar el nombre de las columnas.
Conclusión
En este tutorial, hemos aprendido a eliminar una o más columnas utilizando los métodos drop() y .select(). También hemos descrito métodos alternativos para aprovechar las expresiones SQL si necesitamos técnicas de selección más complejas.
Si quieres ampliar tus conocimientos y aprovechar las potentes técnicas de PySpark, considera la posibilidad de echar un vistazo a estos cursos y materiales:
Para eliminar columnas con un patrón regex en PySpark, puedes filtrar los nombres de las columnas utilizando una comprensión de listas y el módulo re (para expresiones regulares) y, a continuación, pasar la lista filtrada al método .drop().
¿Cómo elimino columnas con el mismo nombre en PySpark?⌄
PySpark no permite duplicar los nombres de las columnas en un DataFrame. Si tu fuente de datos tiene nombres duplicados, es probable que te encuentres con un error al crear el DataFrame. La práctica recomendada es resolver los nombres duplicados de la fuente o durante la creación del DataFrame.
¿Cómo elimino columnas que solo tienen valores nulos en PySpark?⌄
Para eliminar columnas que solo contienen valores nulos en PySpark, podemos calcular primero el número de valores nulos de cada columna utilizando count(when(col(c).isNull(), c)). A continuación, identificamos las columnas en las que el número de valores nulos es igual al número total de filas del DataFrame. Por último, eliminamos estas columnas utilizando el método .drop().
¿Cómo elimino columnas condicionalmente en PySpark?⌄
Usa df.select([col for col in df.columns if condition]).
Utiliza Python Pandas y selecciona columnas de los DataFrames. ¡Sigue nuestro tutorial con ejemplos de código y aprende hoy mismo distintas formas de seleccionar tus datos!
Explora el análisis de datos con Python. Los DataFrames de Pandas facilitan la manipulación de tus datos, desde la selección o sustitución de columnas e índices hasta la remodelación de tus datos.
Aprende a seleccionar fácilmente varias columnas de una tabla de base de datos en SQL, o a seleccionar todas las columnas de una tabla en una simple consulta.
Aprende los detalles prácticos en los que los científicos de datos dedican el 70-80% de su tiempo: preparación de datos e ingeniería de características.
PySpark es especialmente útil cuando trabajamos con grandes conjuntos de datos, porque proporciona métodos eficientes para limpiar nuestro conjunto de datos. En este artículo, nos centraremos en una tarea de limpieza habitual: cómo eliminar columnas de un DataFrame utilizando los métodos de PySpark
.drop()y.select().Para saber más sobre PySpark, consulta el curso Introducción a PySpark.
¿Por qué eliminar columnas en los DataFrames de PySpark?
Eliminar columnas es una tarea habitual en el preprocesamiento de datos por diversas razones. Eliminar columnas innecesarias o irrelevantes puede reducir significativamente la cantidad de datos que debemos procesar. Esto optimiza nuestro conjunto de datos, facilita su análisis y puede aumentar el rendimiento de nuestros trabajos PySpark.
Además, al preparar los datos para los modelos de machine learning, la selección de características suele implicar la eliminación de columnas que no contribuyen a la exactitud del modelo o que podrían introducir ruido. Este paso puede conducir a modelos más eficientes y eficaces.
Por último, eliminar columnas puede ser una estrategia para mejorar la calidad de los datos. Si una columna contiene un alto porcentaje de valores que faltan o datos erróneos, eliminarla puede ser la mejor opción.
Cómo eliminar una sola columna de un DataFrame PySpark
Supongamos que tenemos un DataFrame
dfcon cinco columnas:player_name,player_position,team,minutes_playedyscore. La columnaminutes_playedtiene muchos valores que faltan, por lo que queremos eliminarla.En PySpark, podemos eliminar una sola columna de un DataFrame utilizando el método
.drop().La sintaxis es
df.drop("column_name"), donde:dfes el DataFrame del que queremos eliminar la columnacolumn_namees el nombre de la columna que hay que eliminarEl método
df.drop()devuelve un nuevo DataFrame con las columnas especificadas eliminadas.Así es como podemos eliminar una columna:
Cómo eliminar varias columnas de un DataFrame PySpark
Imaginemos que queremos analizar nuestro DataFrame
df, pero no queremos tener en cuenta el equipo ni la posición del jugador, por lo que queremos eliminar ambas columnas. Hay más de una forma de hacerlo, así que vamos a explorar nuestras opciones.Para eliminar varias columnas de un DataFrame PySpark, podemos pasar una lista de nombres de columnas al método
.drop(). Podemos hacerlo de dos maneras:También podemos encadenar varias llamadas a
.drop(). Aunque este enfoque es técnicamente funcional, no se suele considerar el más eficiente o elegante. Cada llamada crea un nuevo DataFrame, lo que puede introducir sobrecarga, especialmente cuando se trabaja con conjuntos de datos grandes.Eliminar columnas condicionalmente
En lugar de especificar qué columnas eliminar, podemos invertir el método y seleccionar solo las que cumplan una condición o un requisito. De este modo, nuestro DataFrame devuelto ya no contendrá las columnas no deseadas.
Utilizar
.select()Podemos utilizar el método
.select()de PySpark junto con una comprensión de listas para eliminar una o más columnas en función de determinados criterios. El método es flexible, y podemos utilizarlo con una condición sencilla o compleja.Este método sigue la sintaxis
df.select([col for col in df.columns if condition]), donde:dfes el DataFrame con el que estás trabajando.conditiones el criterio utilizado para filtrar las columnas que quieres conservar.Trabajemos de nuevo con nuestro DataFrame df y seleccionemos todas las columnas menos la columna
team:Condiciones complejas con
.selectExpr()Si manejamos bien SQL y tenemos que aplicar condiciones más complejas al filtrar columnas, el método
.selectExpr()de PySpark ofrece una potente solución. Nos permite utilizar expresiones similares a SQL para seleccionar y manipular columnas directamente en nuestro código PySpark.Veamos este ejemplo:
Aquí no solo excluimos una columna. Estamos haciendo lo siguiente:
player_nameyplayer_position.FullMatchque indica si un jugador ha jugado un partido completo (60 minutos o más).Esta flexibilidad hace que
.selectExpr()tenga un valor incalculable para situaciones en las que las simples comprensiones de listas no sean suficientes.Prácticas recomendadas
Cuando decidamos eliminar columnas de nuestro DataFrame, seguir algunas prácticas recomendadas es crucial para mantener la integridad de los datos, la legibilidad del código y la eficiencia.
1. Haz una copia de seguridad de tus datos: Antes de realizar cualquier modificación en tu DataFrame, especialmente al eliminar columnas, es conveniente crear una copia de seguridad. Esto garantiza que puedas volver a los datos originales si es necesario.
2. Elimina con inplace=False (de forma predeterminada): De forma predeterminada, el método
.drop()devuelve un nuevo DataFrame sin modificar el original. En general, esto es más seguro. Si no tienes ninguna duda de que quieres modificar el DataFrame original, puedes utilizarinplace=True, pero ten cuidado.3. Documenta tus decisiones: Si estás trabajando en un proyecto colaborativo o prevés que volverás a usar tu código en el futuro, es útil añadir comentarios que expliquen por qué has decidido eliminar determinadas columnas. Esta documentación puede proporcionar un contexto valioso para ti y para los demás.
4. Considera la posibilidad de cambiar el nombre de las columnas: En lugar de eliminar columnas, debemos plantearnos si cambiarles el nombre sería más adecuado, sobre todo si la información que contienen puede ser valiosa para futuros análisis. PySpark nos proporciona el método
.withColumnRenamed(), que nos ayuda a cambiar el nombre de las columnas.Conclusión
En este tutorial, hemos aprendido a eliminar una o más columnas utilizando los métodos
drop()y.select(). También hemos descrito métodos alternativos para aprovechar las expresiones SQL si necesitamos técnicas de selección más complejas.Si quieres ampliar tus conocimientos y aprovechar las potentes técnicas de PySpark, considera la posibilidad de echar un vistazo a estos cursos y materiales: