Inspección y Selección de Datos
Creando un DataFrame
Un DataFrame es un objeto que almacena datos como filas y columnas. Puede pensar en un DataFrame como una hoja de cálculo o como una tabla SQL. Puede crear manualmente un DataFrame o rellenarlo con datos de un CSV, una hoja de cálculo de Excel o una consulta SQL.
Los DataFrames tienen filas y columnas.
Cada columna tiene un nombre, que es un string.
Cada fila tiene un índice, que es un número entero.
Los DataFrames pueden contener muchos tipos de datos diferentes: strings, integers, floats, tuples, etc.
Puedes pasar un diccionario a pd.DataFrame(). Cada llave es un nombre de columna y cada valor es una lista de valores de columna. Las columnas deben tener la misma longitud o se producirá un error.
Columna de la izquierda
Se conoce como los índices o “row labels” de un DataFrame. Por defecto, cada DataFrame que cree o cargue desde un archivo tendrá esta columna de valores que comienza en 0 y aumenta secuencialmente para cada fila. Estos valores son esencialmente como la identificación para cada fila, ya que cada valor debe ser único por fila.
Para ver los valores de esa columna:
Podemos también ver los valores de una fila en especifico
Creando DataFrames parte 2
También puede añadir datos utilizando listas. Por ejemplo, puede pasar una lista de listas, donde cada una representa una fila de datos. Usamos el “keyword argument” columns para pasar la lista de nombres de las columnas.
Aquí podría surgir una pregunta: ¿Cuándo debería crear un DataFrame de Pandas usando un diccionario o una lista? Dependiendo de varios factores, se puede preferir usar uno sobre el otro. El uso de diccionarios puede ser mucho más rápido, ya que puede incluir los nombres de las columnas como claves e incluir los valores de la columna como una lista para las claves. Sin embargo, una desventaja de usar un diccionario es que las columnas no conservarán el orden en el que las ingresó y, en su lugar, el orden por defecto será el orden alfabético. Esto es importante tenerlo en cuenta, especialmente si el orden de las columnas es importante.
El uso de una lista de listas le permite introducir cada fila de datos una por una como una lista separada, pero puede llevar más tiempo que el uso de un diccionario, ya que los nombres de las columnas deben añadirse como una lista separada después de que se añadan las filas. Sin embargo, una lista de listas le permite ordenar los nombres de las columnas específicamente, lo que puede ser muy importante.
CSVs en Pandas
Ahora sabemos cómo crear nuestro propio DataFrame. Sin embargo, la mayoría de las veces, trabajaremos con conjuntos de datos que ya existen. Uno de los formatos más comunes para grandes conjuntos de datos es el CSV.
CSV (valores separados por comas) es un formato de hoja de cálculo de sólo texto. Puedes encontrar CSVs en muchos lugares:
Conjuntos de datos en línea (aquí hay un ejemplo de data.gov)
Kaggle (datasets)
UCI Machine learning (datasets)
Competencias en DataSource.ai: (datasets)
Exportación desde hojas de Excel o Google
Exportación desde SQL
Resultado de un (Scraping)[https://en.wikipedia.org/wiki/Web_scraping]
La primera fila de un CSV contiene encabezados de columna. Todas las líneas siguientes contienen valores. Cada encabezado de columna y cada variable están separados por una coma:
Aquí podrían surgir nuevas preguntas, tales como: En un archivo CSV, ¿importa el espaciado antes y después de las comas? Sí, en la mayoría de los casos para los archivos CSV, Pandas separa los datos por comas, y mantiene los espacios que fueron incluidos antes o después de una coma. Por eso, es importante que al crear un archivo CSV, cada valor sólo se separe con una coma sin espacios en blanco no deseados antes o después de las comas, ya que no se eliminarán automáticamente.
Cargando y guardando CSVs
Vaya al siguiente enlace y descargue el csv a su maquina local. Suba el archivo a su ambiente de trabajo (aquí deberías estar usando un notebook: Jupyter o Colab).
Cuando usted tiene datos en un CSV, usted puede cargarlos en un DataFrame en pandas usando .read_csv()
¿Qué pasa si hay valores vacíos o faltan valores en un archivo CSV? Si el archivo CSV contiene valores vacíos, entonces cuando leemos el archivo, rellenará las celdas vacías con NaN
. NaN
es la abreviación de "Not a Number", y se usará para significar valores perdidos.
Inspeccionando un DataFrame
Cuando cargamos un nuevo DataFrame desde un CSV queremos saber cómo luce. Si es un DataFrame pequeño, podemos imprimirlo escribiendo print(df)
Si es un DataFrame grande nos ayuda mejor si inspeccionamos pocos ítems sin tener que mirar el DataFrame completo. El método .head()
nos da las primeras 5 filas de un DataFrame.
Si queremos ver más filas, podemos pasar un argumento posicional n
. Por ejemplo df.head(10)
nos traería las primeras 10 filas
El metodo df.info()
nos da algunas estadísticas sobre cada columna
Seleccionar Columnas
Ahora que ya conocemos cómo crear y cargar datos, vamos a seleccionar partes de ese dataset que son interesantes o importantes para nuestro análisis
Supongamos que tenemos un DataFrame llamado customers
que contiene lo siguiente:
Supongamos que usted quiere tomar el promedio de edades, o dibujarle un histograma de las edades. Para hacer esto debemos seleccionar la columna. Hay dos formas de hacerlo:
Seleccionar la columna como si estuviéramos seleccionado un valor de un diccionario:
customers['age']
para tomar los añosSi el nombre de la columna cumple con los requisitos de nombramiento de variables, puede entonces seleccionarla usando la siguiente notación:
df.MySecondColumn
. En nuestro ejemplo:customers.age
Ejercicio:
Selecciona la columna
age
del DataFrameimdb.csv
con la notación de diccionarioSelecciona la columna
genre
del DataFrameimdb.csv
con la notación de variable.
Respuesta:
Series
Cuando seleccionamos una sola columna, el resultado es también llamado Series
Series Vs DataFrame
Un Pandas series es un objeto de una sola dimensión que contiene cualquier tipo de datos, y es similar a un array de Numpy.
Las Series tienen un único nombre "label" de eje como el título de la columna el cual es el índice de la serie. Una serie es esencialmente una columna única.
Creemos una Serie en vez de un DataFrame
Un dataframe es un objeto de dos dimensiones que puede contener múltiples columnas de diferentes tipos de datos. Ellos son similares a una tabla SQL. Una única columna de un dataframe es una Serie y un dataframe es un contenedor de dos o más series.
Cuando tienes un dataframe muy grande, podrías querer seleccionar solo unas pocas columnas. Para seleccionar dos o más columnas de un dataframe, usamos una lista de los nombres de las columnas.
Seleccionando múltiples columnas
Cuando tienes un dataframe muy grande, podrías querer seleccionar solo unas pocas columnas. Para seleccionar dos o más columnas de un dataframe, usamos una lista de los nombres de las columnas.
Aquí podría surgir una nueva pregunta: ¿Podemos seleccionar las columnas en cualquier orden? Si. Al seleccionar varias columnas de un DataFrame, puede ordenarlas de la forma que desee que aparezcan. Esto es particularmente útil porque si quisiéramos ver los datos de una cierta manera diferente al orden original de las columnas, podemos re-ordenarlos en la salida de la forma que necesitemos.
Seleccionando Filas
Los dataframes son zero-indexed lo que significa que empieza por 0 y suma desde ahí. Si queremos seleccionar “The Avengers” que está en la tercera fila, lo hacemos con este comando:
Aquí podría surgir una nueva pregunta: Cuando seleccionamos una fila, también se le denomina una "Serie"? Si. Igual a como cuando seleccionamos una columna
¿Cómo es que el resultado del iloc no es una lista? Al usar iloc en Pandas, devolverá una fila especificada, pero en forma de Serie. La columna izquierda del resultado está compuesta por índices que son los nombres de las columnas del dataframe. Y la columna de la derecha está compuesta por los valores de cada columna de la fila de datos. Esta es una característica útil en Pandas porque muestra toda la información sobre las columnas y los valores de una fila de forma clara.
Seleccionando múltiples filas
Estas son diferentes formas de seleccionar multiples filas:
Selecciona de la 3ra a la 6ta
Selecciona de la 0 a la 3ra
Selecciona las ultimas 3
Cuando usamos iloc para seleccionar rangos de filas del dataframe ¿podemos omitir filas? Si, es muy similar al slicing de python
Seleccionando filas
Usted puede seleccionar un subset de datos de un dataframe usando sentencias lógicas de esta forma: df[df.MyColumnName == desired_column_value]
. Supongamos que queremos seleccionar las películas de género “horror”
O las mayores al año 2013
O las que son diferentes al género romance
Usted puede también combinar múltiples sentencias lógicas, y cada sentencia en paréntesis. Por ejemplo queremos seleccionar las que son mayores a 2013 o son del género "drama"
O las que son mayores al 2013 y son género "drama"
¿Importa el orden de los operadores lógicos? Si y no. Depende de cuantas sentencias lógicas haya. Cuando hay solo una sentencia lógica siempre será evaluado de la misma forma porque solo es una sentencia. Por ejm: num < 3
Cuando hay dos sentencias lógicas, el orden no importa porque solo aplicaría or
o and
(|, &)
Cuando hay más de dos sentencias lógicas el orden empieza a importar.
Comando isin
isin
Volvamos a nuestro dataframe de movies, y supongamos que queremos seleccionar las filas donde las películas sean “Star Wars”, “Dark Shadows” y “Blade”. Podemos usar el comando isin
para chequear el nombre: df.name
Reset Index
Cuando seleccionamos un subset de un dataframe usando lógica, terminamos con índices no-consecutivos. Esa es una forma poco elegante y nos hace difícil la tarea de seleccionar por índices con iloc
. Podemos solucionar esto usando el método .reset_index()
.
Siguiendo con el ejemplo inmediatamente anterior:
Como puedes ver los índices fueron movidos a una columna llamada index
. A menos que se necesiten para algo especial, podemos usar drop=True
.
¿Cuándo deberíamos usar el reset_index()
? Cuando un dataframe no tiene índices consecutivos, osea que no son secuenciales (0, 1, 2 …)
y salta algunos números. Esto se da con los subsets (selecciones de ciertas filas). Otra situación es cuando la columna que es por default el índice fue cambiada por otros valores diferentes a integers, por ejemplo names
. Pandas permite esto. Por tanto necesitamos otra vez indices
Last updated