No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Limpiar los datos

14/32
Recursos

Aportes 62

Preguntas 27

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

hay valores duplicados los cuales nunca se tratan.

movies_v2.duplicated(['movie_title'],keep=False).value_counts()
#valores repetidos

False    4298
True       87
dtype: int64
#dataframe.drop_duplicates() devuelve un dataframe nuevo por eso hay que asignarlo a una nueva variable.
movies_v3 = movies_v2.drop_duplicates(subset='movie_title')
movies_v3.shape
(4341, 11)

Muy bien todo hasta aquí, tuve problemas en el momento de hacer el merge, esto debido a que habia ejecutado dos veces el concat, y por cada ejecución me creaba una columna ‘movie_title’, la solución es ejecutar todo desde donde se crea el movies_num.

Para los que se les dificulte encontrar el archivo , lo pueden sacar de aquí :

https://github.com/JuanPabloMF/datasets-platzi-course/tree/master/datasets

(Me pasó) …

Antes de realizar el merge entre los dataframes eliminé los elementos duplicados en movies_num, así tras combinarlo con financials se obtiene un movies_num de igual longitud: 4341. Por si a alguien le es de utilidad, les comparto el código implementadohttps://www.analyticslane.com/2018/06/20/eliminar-registros-duplicados-en-pandas/

¿Por qué si financials tenía 4341, al hacer el join izquierdo terminamos con 4385? ¿De dónde salen los 44 extra?

Para borrar una columna
movies_num.drop([“movie_title”],axis=1)
movies_num

para los que esten trabajando en el cloud, este es link para que o copien y peguen dentro de pd.read_csv

https://raw.githubusercontent.com/JuanPabloMF/datasets-platzi-course/master/datasets/thenumbers.csv

¿En python no es posible visualizar una bases completa? como estilo excel o stata? Creo que es importante poder observar toda la base completa para entender con qué datos se esta trabajando y ver los cambios que se le están haciendo a toda la base.

Se debe tener mucho cuidado al hacer los concat y los merge, corri 2 veces la misma linea de codigo y se me crearon 2 columnas con el mismo nombre que no me permitia hacer correctamente el merge. Buena clase.

En este link pueden encontrar más información sobre la función merge.

hay películas repetidas en el archivo peliculas.csv, por lo tanto, les sugiero eliminar los registros duplicados del dataframe movies mediante:
movies = movies.drop_duplicates()

O en su defecto eliminar os registros duplicados directamente en el archivo peliculas.csv

Si bien un Ing. En aprendizaje de maquina suele hacer limpieza, no es su trabajo principal.

El paquete pandas proporciona varios métodos de combinar DataFrames incluyendo merge y concat.

En el dataframe final algunas filas se repiten, es por eso que el dataframe queda de 4385 filas y no de 4341 (shape de financials), entre las filas que se repiten están:

8 Spider-Man 3
9 Spider-Man 3
34 Skyfall
35 Skyfall
37 Oz the Great and Powerful
38 Oz the Great and Powerful
42 TRON: Legacy
43 TRON: Legacy
148 Exodus: Gods and Kings
149 Exodus: Gods and Kings
296 The Lovely Bones
297 The Lovely Bones
579 Unbroken
580 Unbroken

Para encontrarlas se puede usar dataframe.duplicated(‘movie_title’), esto genera una serie de valores booleanos en donde True significa que la fila en cuestión es la repetición de una fila anterior.

Para eliminarlas se puede usar dataframe.drop_eliminates(‘movie_title’), esto encuentra y elimina las filas repetidas basado en el título de la película.

Puedes exportar tus propios csv a drive así:



from google.colab import drive #Importamos drive
drive.mount(’/gdrive’) # nos autenticamos

#generamos el archivo, en este caso yo creé una carpeta en drive llamada csv-colab y allí guarde mi

#archivo movies_num_cols.csv. recuerden que movies_num lo generamos en los primeros pasos de este video.
with open(’/gdrive/My Drive/csv-colab/movies_num_cols.csv’, ‘w’) as f:
movies_num.to_csv(f)```

Ahora el histograma tiene mas sentido:

con problemas para hacer el merge, ejecutar de nuevo desde el movies_num

No es ideal perder datos sin embargo, es mejor tener datos de calidad a tener datos sucios, además el perder una cantidad de datos mínima no afectaría, a perder el 50%

Además de la definición de merge en pandas que se han dado en los comentarios, cabe a resaltar que para entender mejor los merges debemos de tener claro el funcionamiento de la teoría de conjuntos, es decir union, interseccion, diferencia etc.

Hola, este es la unica manera que me ha funcionado para importar el archivo desde mi pc:

import io

from google.colab import files
uploaded = files.upload()

thenumbers = pd.read_csv(io.BytesIO(uploaded['thenumbers.csv']))

We can join, merge, and concat dataframe using different methods. In Dataframe df.merge(),df.join(), and df.concat() methods help in joining, merging and concating different dataframe.

I recommend you visit this page.

Buenas tardes, para los que están trabajando en Colab con este código lo corrí, particularmente tuve 2 problemas.

  1. Me arrojaba error indicando que pd no estaba definido por lo cuál lo solucione importando nuevamente la librería.
  2. La extracción de las columnas arrojaba error sin razón, es por que el profesor lo hace con paréntesis hubo que usar llaves.
import numpy as np
import pandas as pd
from sklearn import linear_model
import matplotlib.pyplot as plt

%matplotlib inline

financials = pd.read_csv('https://github.com/JuanPabloMF/datasets-platzi-course/blob/master/datasets/thenumbers.csv?raw=true',encoding='utf-8')

financials = financials [["movie_title", "production_budget", "worldwide_gross"]]

financials.shape```

El dataFrame “financials” tiene 4341 columnas, pero movies_v2 tiene 4385, 44 columnas más. ¿Porqué no tienen el mismo numero de columnas?

Necesito que por favor me ayuden con este error llevo mucho intentando que me funciones y no he podido

 movies_v2 = pd.merge(movies_v2,opening_gross,on='movie_title',how='left')
El errror que me arroja es el siguiente: KeyError                                  Traceback (most recent call last)

<ipython-input-455-023018211638> in <module>()
----> 1 movies_v2 = pd.merge(movies_v2,opening_gross,on='movie_title',how='left')

3 frames

/usr/local/lib/python3.6/dist-packages/pandas/core/generic.py in _get_label_or_level_values(self, key, axis)
   1690             values = self.axes[axis].get_level_values(key)._values
   1691         else:
-> 1692             raise KeyError(key)
   1693 
   1694         # Check for duplicates

KeyError: 'movie_title'

Me paso que al importar el dataset de peliculas al final de cada titulo se agregaba \xa0. Para resolverlo use el siguiente código:

movies_clean['movie_title'] = movies_clean['movie_title'].str.rstrip('\xa0')

Con esta sentencia se halla el número total de datos que estamos perdiendo en esta limpieza:

len(movies.index) - len(financials.index)

Para este ejemplo: Indica que vamos a perder 702 datos. No es lo ideal perder datos, pero es mejor tener datos de calidad

metodo para agragar una nueva columna booleana indicando si esta duplicada por movie_title

movies_num_uniq = movies_num.assign(
is_duplicate = lambda d: d.duplicated([‘movie_title’],keep=‘first’)
)

Para que el resultado de 4381 conforme al dataframe finanacials, se debe eliminar antes de hacer el Merge, los duplicados del dataframe movies_num.

Recuerdan la teoría de conjuntos?

Muy interesante la forma para limpiar datos.

  • Debemos tener cuidado a la hora de concatenar, hacer join, hacer sumas, pues los index deben coincidir.

El código funciona para esta parte:
movies=pd.read_csv(‘datasets\peliculas.csv’, encoding=‘utf-8’)

ahora con este me surge error:
sdfas=pd.read_csv(‘datasets\thenumbers.csv’)
en esta misma línea si sustituyo thenumbers por peliculas, corre. Solo no corre con thenumbers.csv, se revisó el nombre…

aquí el error:

`---------------------------------------------------------------------------
FileNotFoundError Traceback (most recent call last)
<ipython-input-30-9458aea90c38> in <module>
1 # Importar BBDD
----> 2 sdfas=pd.read_csv(‘datasets\thenumbers.csv’)

~\Anaconda3\lib\site-packages\pandas\io\parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, dialect, error_bad_lines, warn_bad_lines, delim_whitespace, low_memory, memory_map, float_precision)
683 )
684
–> 685 return _read(filepath_or_buffer, kwds)
686
687 parser_f.name = name

~\Anaconda3\lib\site-packages\pandas\io\parsers.py in _read(filepath_or_buffer, kwds)
455
456 # Create the parser.
–> 457 parser = TextFileReader(fp_or_buf, **kwds)
458
459 if chunksize or iterator:

~\Anaconda3\lib\site-packages\pandas\io\parsers.py in init(self, f, engine, **kwds)
893 self.options[“has_index_names”] = kwds[“has_index_names”]
894
–> 895 self._make_engine(self.engine)
896
897 def close(self):

~\Anaconda3\lib\site-packages\pandas\io\parsers.py in _make_engine(self, engine)
1133 def _make_engine(self, engine=“c”):
1134 if engine == “c”:
-> 1135 self._engine = CParserWrapper(self.f, **self.options)
1136 else:
1137 if engine == “python”:

~\Anaconda3\lib\site-packages\pandas\io\parsers.py in init(self, src, **kwds)
1915 kwds[“usecols”] = self.usecols
1916
-> 1917 self._reader = parsers.TextReader(src, **kwds)
1918 self.unnamed_cols = self._reader.unnamed_cols
1919

pandas_libs\parsers.pyx in pandas._libs.parsers.TextReader.cinit()

pandas_libs\parsers.pyx in pandas._libs.parsers.TextReader._setup_parser_source()

FileNotFoundError: [Errno 2] File b’datasets\thenumbers.csv’ does not exist: b’datasets\thenumbers.csv’

<code>

Ya casi esta lista!!!

La función pandas.merge nos permite realizar “joins” entre tablas. El join es realizado sobre las columnas o sobre las filas.

Aprendiendo cada clase

No encuentro el archivo de Web Scraping que hicieron para la limpieza de datos, donde lo encuentro?

tuve que recurrir a los comentarios, @felipe5, toco eliminar las repetidas.

¿Desde dónde podemos descargar el script que generó el archivo de the-numbers.com?

pd.read_csv('https://github.com/JuanPabloMF/datasets-platzi-course/blob/master/datasets/thenumbers.csv?raw=true', encoding='utf-8');

Muy bien explicado.

great course

Tuve problemas con merge, pero lo logre solucionar, buena clase.

Interesante forma de hacer joins con estas librerias 😃

Faltó mostrar que más puede hacer el merge, me refiero que en BD el uso de inner join contiene muchas posibilidades.

genial… gracias

Muy bien en la limpieza de los datos.

Esta parte de limpiar es clave… pero como buena práctica se debe enseñar a subir buenos datos (principalmente a los funcionarios de las instituciones del estado)

se nota q es un curso mas avanzado

pd.read_csv('https://github.com/JuanPabloMF/datasets-platzi-course/blob/master/datasets/thenumbers.csv?raw=true',encoding='utf-8')```

Buena tarde, al hacer el merge no me muestra los datos de movies_num solamente las columnas movie_title, production_budget y worldwide_gross aparecen con datos.

Buenas tardes.
Al hacer el merge entre movies_num y financials la mayoria de los datos me aparecen en NaN, alguién podría decirme que estoy haciendo mal? De antemano muchas gracias.

Súper útil!!!

Con el siguiente código.

num.index```

Obtuve el mismo resultado que con este.

num = (movies.dtypes == float) | (movies.dtypes == int)
num.index

Si son 3 tipos de datos, solo decir que entregue los diferentes a Object, quedarían solo los float y los int.

Este es el código no me lo copio en el mensaje anterior.

num = movies.dtypes != object```

muchachos les comparto este link con informacion de pandas.merge

https://datacarpentry.org/python-ecology-lesson-es/05-merging-data/

Pueden descargar el archivo peliculas.csv sin los registros duplicados desde el siguiente enlace:

https://www.dropbox.com/t/xYcYazQ79FgWWBUz

#importar los datos desde thenumbers.com, es para quitar las columnas que no sirven
pd.read_csv('https://github.com/JuanPabloMF/datasets-platzi-course/raw/master/datasets/thenumbers.csv')```

Ejemplo para exportar mis propios archivos.csv a Google Drive:

from google.colab import drive   # Importar drive
drive.mount('/gdrive')           # nos autenticamos


import pandas as pd
movies = pd.read_csv('https://raw.githubusercontent.com/JuanPabloMF/datasets-platzi-course/master/datasets/peliculas.csv', encoding='utf-8')


num = (movies.dtypes == float) | (movies.dtypes == int)
num_cols = [c for c in num.index if num[c]]
movies_num = movies[num_cols]

A continuación se generará el archivo movies_num.csv.
Quedará guardado en la carpeta movies numerico (ya creada previamente en Drive).

with open('/gdrive/My Drive/movies numerico/movies_num.csv', 'w') as f: movies_num.to_csv(f)

Como recomendación verifiquen que tengan las columnas correctas con la funcion .head().
Tuve un problema y era que el concat no se había ejecutado. Así que no contaba con la columna de titulos.