{ "cells": [ { "cell_type": "markdown", "id": "6dd4a4e6", "metadata": {}, "source": [ "# Renombrar columnas\n", "\n", "Un problema común de las fuentes de datos abiertas está relacinado con la forma en la cuales están nombradas las columnas. Es usual recurrir a abreviaturas, pero también es común que las categorías estén marcadas en forma de códigos. En nuestro caso, la mayoría de columnas son lo suficientemente descriptivas para que no sea necesario renombrarlas. Sin embargo, podríamos darles un nombre aún más descriptivo, en particular a las columnas `[\"entidad_nac\",\"entidad_res\",\"municipio_res]`.\n", "\n", "La sintaxis para renombrar una columna es:\n", "\n", "```python\n", "df.rename(columns={'columna_original':'nuevo_nombre'}, inplace=True)\n", "```\n", "\n", "El parámetro `inplace` es opcional, pero si no se especifica debe asignarse el resultado a una nueva variable, de otra manera parecerá que el renombre no tuvo éxito.\n", "\n", "Como muchas operaciones en `pandas` podemos valernos de un diccionario para modificar aplicar una serie de cambios a las columnas. Sirvámonos de nuestro ejemplo de datos:" ] }, { "cell_type": "code", "execution_count": 1, "id": "44a85f2a", "metadata": { "tags": [ "remove-cell" ] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/jairoantonio/opt/anaconda3/lib/python3.9/site-packages/IPython/core/interactiveshell.py:3444: DtypeWarning: Columns (13) have mixed types.Specify dtype option on import or set low_memory=False.\n", " exec(code_obj, self.user_global_ns, self.user_ns)\n" ] } ], "source": [ "import pandas as pd\n", "try:\n", " covid_nacional = pd.read_csv('../data/casos_nacionales_covid-19_2022_semestre1.csv')\n", "except FileNotFoundError:\n", " covid_nacional = pd.read_csv('../datos/casos_nacionales_covid-19_2022_semestre1.csv')" ] }, { "cell_type": "code", "execution_count": 2, "id": "31f905ff", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Unnamed: 0fecha_actualizacionid_registroorigensectorentidad_umsexoentidad_nacimientoentidad_residenciamunicipio_residencia...otro_casotoma_muestra_labresultado_labtoma_muestra_antigenoresultado_antigenoclasificacion_finalmigrantepais_nacionalidadpais_origenuci
782022-06-260ba73dFUERA DE USMERISSSTECIUDAD DE MÉXICOMUJERQUERÉTAROMÉXICONAUCALPAN DE JUÁREZ...NONONO APLICA (CASO SIN MUESTRA)NONO APLICA (CASO SIN MUESTRA)CASO SOSPECHOSONO ESPECIFICADOMÉXICONO APLICANO APLICA
892022-06-260681f2FUERA DE USMERSSACIUDAD DE MÉXICOHOMBRECIUDAD DE MÉXICONaNNaN...NONONO APLICA (CASO SIN MUESTRA)SINEGATIVO A SARS-COV-2NEGATIVO A SARS-COV-2NO ESPECIFICADOMÉXICONO APLICANO APLICA
9102022-06-260a98b4FUERA DE USMERSSACIUDAD DE MÉXICOMUJERMICHOACÁN DE OCAMPONaNNaN...NONONO APLICA (CASO SIN MUESTRA)SIPOSITIVO A SARS-COV-2CASO DE SARS-COV-2 CONFIRMADONO ESPECIFICADOMÉXICONO APLICANO APLICA
\n", "

3 rows × 41 columns

\n", "
" ], "text/plain": [ " Unnamed: 0 fecha_actualizacion id_registro origen sector \\\n", "7 8 2022-06-26 0ba73d FUERA DE USMER ISSSTE \n", "8 9 2022-06-26 0681f2 FUERA DE USMER SSA \n", "9 10 2022-06-26 0a98b4 FUERA DE USMER SSA \n", "\n", " entidad_um sexo entidad_nacimiento entidad_residencia \\\n", "7 CIUDAD DE MÉXICO MUJER QUERÉTARO MÉXICO \n", "8 CIUDAD DE MÉXICO HOMBRE CIUDAD DE MÉXICO NaN \n", "9 CIUDAD DE MÉXICO MUJER MICHOACÁN DE OCAMPO NaN \n", "\n", " municipio_residencia ... otro_caso toma_muestra_lab \\\n", "7 NAUCALPAN DE JUÁREZ ... NO NO \n", "8 NaN ... NO NO \n", "9 NaN ... NO NO \n", "\n", " resultado_lab toma_muestra_antigeno \\\n", "7 NO APLICA (CASO SIN MUESTRA) NO \n", "8 NO APLICA (CASO SIN MUESTRA) SI \n", "9 NO APLICA (CASO SIN MUESTRA) SI \n", "\n", " resultado_antigeno clasificacion_final \\\n", "7 NO APLICA (CASO SIN MUESTRA) CASO SOSPECHOSO \n", "8 NEGATIVO A SARS-COV-2 NEGATIVO A SARS-COV-2 \n", "9 POSITIVO A SARS-COV-2 CASO DE SARS-COV-2 CONFIRMADO \n", "\n", " migrante pais_nacionalidad pais_origen uci \n", "7 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA \n", "8 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA \n", "9 NO ESPECIFICADO MÉXICO NO APLICA NO APLICA \n", "\n", "[3 rows x 41 columns]" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Renombrar columnas\n", "covid_nacional.rename(columns={\n", " \"entidad_nac\": \"entidad_nacimiento\",\n", " \"entidad_res\": \"entidad_residencia\",\n", " \"municipio_res\": \"municipio_residencia\"\n", "}, inplace=True)\n", "covid_nacional[7:10]" ] }, { "cell_type": "markdown", "id": "00ba274b", "metadata": {}, "source": [ "Verás que el resultado corresponde a las columnas de nuestro dataframe, ahora con un nuevo nombre.\n", "\n", "```{admonition} Atención\n", ":class: tip\n", "Las columnas renombradas solamente se mantendrán con el nuevo nombre durante la ejecución del programa. Es decir, el archivo original no se modificará.\n", "```\n", "\n", "## ¿Por qué modificar las columnas desde el programa en lugar de hacerlo directamente en el csv?\n", "\n", "En primer lugar, porque podemos cometer un error al renombrar el archivo original, por ejemplo, borrar un coma y modificar la separación de las columnas. También, al guardar nuevamente el conjunto de datos podemos cambiar su codificación y perder algunos datos. Además, si la fuente de datos se actualiza aplicamos el código a un nuevo archivo ya no funcionará porque no encontrará correctamente los nombres de las columnas. Y finalmente, porque es mucho más fácil modificar el código que modificar el archivo original; un archivo muy grande puede ser lento para abrir y más para modificar, por eso es mucho más rápido hacerlo directamente desde nuestro programa.\n", "\n", "Otra opción es hacer que el programa guarde una copia del archivo original con las columnas renombradas, pero esta práctica no es recomendable, puesto que puede generar duplicidad e inconsistencia en la información." ] } ], "metadata": { "jupytext": { "cell_metadata_filter": "-all", "formats": "md:myst", "text_representation": { "extension": ".md", "format_name": "myst", "format_version": 0.13, "jupytext_version": "1.14.0" } }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.9.7" }, "source_map": [ 14, 30, 39, 47 ] }, "nbformat": 4, "nbformat_minor": 5 }