{"id":27040054,"url":"https://github.com/cuadernin/optdatapython","last_synced_at":"2026-05-16T00:39:42.660Z","repository":{"id":240263307,"uuid":"800662026","full_name":"Cuadernin/OptDataPython","owner":"Cuadernin","description":"Optimización de lectura de datasets en Python","archived":false,"fork":false,"pushed_at":"2024-05-27T22:01:08.000Z","size":27,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-05-28T07:58:55.343Z","etag":null,"topics":["analytics","big-data","data-science","dataframe","pandas","python","python3"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Cuadernin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-05-14T18:54:03.000Z","updated_at":"2024-05-27T22:01:12.000Z","dependencies_parsed_at":"2024-05-28T01:40:26.510Z","dependency_job_id":null,"html_url":"https://github.com/Cuadernin/OptDataPython","commit_stats":null,"previous_names":["cuadernin/optdatapython"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cuadernin%2FOptDataPython","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cuadernin%2FOptDataPython/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cuadernin%2FOptDataPython/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Cuadernin%2FOptDataPython/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Cuadernin","download_url":"https://codeload.github.com/Cuadernin/OptDataPython/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247284932,"owners_count":20913690,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["analytics","big-data","data-science","dataframe","pandas","python","python3"],"created_at":"2025-04-05T03:27:40.490Z","updated_at":"2025-10-24T14:39:09.716Z","avatar_url":"https://github.com/Cuadernin.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Optimización de lectura de datasets usando Pandas\nTanto Python como `Pandas` están bien optimizados para leer millones de registros de forma rápida y eficaz. Sin embargo, muchas veces es posible optimizar aún más. \n\nLa siguiente imagen es un caso real de una base de datos de 20GB cuya lectura a partir de CSV toma 17 mins y gracias a la siguiente guia logré disminuir el tiempo a menos de 2 mins.\n\n\u003cimg align=\"center\" src=https://github.com/Cuadernin/OptDataPython/blob/main/TimeExecution.jpg height=\"180\" width=\"510\"\u003e \n\u003cbr/\u003e\n\n---\n## Guía 📑 (usando `Pandas`)\nEn un primer instante es necesario leer los datos en crudo para iniciar con la optimización.\n\n1. Realiza un análisis exploratorio haciendo enfasis en identificar los mejores tipos de datos para cada campo. Este paso es sumamente importante ya que a partir de aquí es posible determinar qué campos son optimizables. \n   * Por ejemplo, si una variable con __1s y 0s__ `Pandas` la identifica como [float](https://pandas.pydata.org/docs/reference/api/pandas.Float64Dtype.html) (suele pasar) es muchísimo mejor cambiar el tipo a [boolean](https://pandas.pydata.org/docs/reference/api/pandas.BooleanDtype.html)\n   * Si existe el campo _edad_ o algún otro cuyos valores no son tan altos cambialo a [`np.int8`](https://numpy.org/doc/stable/reference/arrays.scalars.html#numpy.int8) o [`np.int16`](https://numpy.org/doc/stable/reference/arrays.scalars.html#numpy.int16).\n   * Identica los campos de fecha y cambialos a `datetime` o `timedelta` según sea el caso\n   * En caso que un campo de tipo string cumpla con las reglas de [categorical](https://pandas.pydata.org/docs/user_guide/categorical.html) (similar al factor en R), cambíalo. Este paso optimiza muchísimos procesos y es muy recomedable analizar si [aplica](https://stackoverflow.com/questions/30601830/when-to-use-category-rather-than-object).\n\n**Los casos más sensibles son los númericos, pues la optimización de los campos depende del rango de valores qué tiene cada campo y si esta bien que haya `NA`. Justo para eso es el análisis exploratorio.**\n\n2. Corrige errores en los campos de tipo `object`. Por ejemplo, el siguiente bloque de código muestra como es posible hacer algunos cambios en un campo de tipo `object` para posteriormente convertirlo a [boolean](https://pandas.pydata.org/docs/user_guide/boolean.html)\n   \n```python\ndf['Casado'] = df['Casado'].replace({1:True,0:False,'VERDADERO':True,'FALSO':False,'TRUE':True,'FALSE':False,'True':True,'False':False,'false':False,'true':True,'1':True,'0':False},regex=True)\ndf['Casado'] = df.Casado.astype(\"boolean\")\n```\n3. Después de haber optimizado los campos debes guardar el dataset usando la extensión **[FEATHER](https://arrow.apache.org/docs/python/feather.html)** en caso que solo lo vayas a usar en Python o R. En caso que no sea así podrías usar **[alguna de estas](https://towardsdatascience.com/the-best-format-to-save-pandas-data-414dca023e0d)**.\n___\n\n\u003e **Nota: Existen ciertas librerias alternativas a `Pandas`. Puedes usarlas pero desde mi experiencia antes debes identificar si la librería te ayudará después de la lectura ya que algunas tienen limitaciones o son muy estrictas con los tipos de datos, lo que puede dificultar los pasos siguientes.**\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcuadernin%2Foptdatapython","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcuadernin%2Foptdatapython","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcuadernin%2Foptdatapython/lists"}