Clase 1 Conceptos Base

Introduccion al analisis de datos, Python y Google Colab.

¿Que es el analisis de datos?

Proceso de inspeccionar, limpiar, transformar y modelar datos con el objetivo de descubrir informacion util, llegar a conclusiones y apoyar la toma de decisiones.

Etapas del proceso de analisis

  1. Recoleccion de datos — obtener datos de diversas fuentes
  2. Limpieza y preparacion — manejar nulos, duplicados, tipos incorrectos
  3. Exploracion y analisis — explorar patrones, tendencias, relaciones
  4. Visualizacion — representar graficamente los hallazgos
  5. Interpretacion y conclusiones — extraer insights accionables

¿Por que Python para analisis de datos?

  • Amplia variedad de librerias especializadas
  • Facil de aprender y usar
  • Comunidad activa y soporte
  • Versatilidad y escalabilidad
  • Codigo abierto y gratuito
  • Integracion con otras tecnologias
  • Soporte para automatizacion

Librerias principales de Python

Limpieza y manejo de datos:

  • NumPy — calculos numericos, algebra lineal, arrays multidimensionales
  • Pandas — manipulacion y analisis de datos tabulares con DataFrames

Visualizacion:

  • Matplotlib — graficos basicos y personalizados, alto control visual
  • Seaborn — graficos estadisticos esteticos, basado en Matplotlib
  • plotnine (ggplot) — gramatica de graficos, visualizaciones complejas declarativas

¿Que es Google Colab?

Entorno de notebooks en la nube basado en Jupyter. Permite ejecutar Python sin instalacion local. Tiene dos tipos de celdas:

  • Celdas de codigo — ejecutan Python
  • Celdas de texto — usan Markdown para formatear documentacion
Doble clic en una celda de texto para ver el fuente Markdown. Hay una toolbar de edicion visible al editar.

Clase 1 Markdown en Google Colab

Cada tarjeta muestra el codigo Markdown a la izquierda y como se ve renderizado a la derecha — igual que en Colab.

Editor en vivo — escribe Markdown y ve el resultado

Escribe cualquier Markdown en el panel izquierdo y ve el resultado renderizado en tiempo real. Prueba todo lo de esta seccion aqui.

✏ Markdown (edita aqui)
👁 Resultado renderizado

Formato de texto

markdown
**texto en negrita**
*texto en cursiva*
_tambien cursiva_
`codigo monoespaciado`
~~texto tachado~~
[un link](https://colab.google)
![imagen](url-de-imagen)
Renderizado

texto en negrita

texto en cursiva

tambien cursiva

codigo monoespaciado

texto tachado

un link

![imagen] → inserta una imagen desde URL

Encabezados — generan el indice lateral de Colab

markdown
# Titulo H1
## Subtitulo H2
### Sub-subtitulo H3
Renderizado

Titulo H1

Subtitulo H2

Sub-subtitulo H3

Listas ordenadas, no ordenadas y blockquotes

markdown
Ordenada (todos con 1.):
1. Primero
1. Segundo
1. Tercero

No ordenada:
* item uno
* item dos
- tambien con guion

Blockquote (indentacion):
>Un nivel
>>Dos niveles
Renderizado

Ordenada:

  1. Primero
  2. Segundo
  3. Tercero

No ordenada:

  • item uno
  • item dos
  • tambien con guion

Blockquote:

Un nivel
Dos niveles

Bloques de codigo

markdown
```python
import pandas as pd
df = pd.read_csv("datos.csv")
print(df.head())
```
Renderizado
import pandas as pd
df = pd.read_csv("datos.csv")
print(df.head())

Tablas

markdown
Columna 1 | Columna 2
----------|----------
Valor A   | Valor B
Valor C   | Valor D
Renderizado
Columna 1Columna 2
Valor AValor B
Valor CValor D

Ecuaciones LaTeX (MathJax)

markdown
$y = x^2$

$e^{i\pi} + 1 = 0$

$\frac{n!}{k!(n-k)!} = {n \choose k}$

$e^x=\sum_{i=0}^\infty \frac{1}{i!}x^i$
Renderizado

$y = x^2$

$e^{i\pi} + 1 = 0$

$\frac{n!}{k!(n-k)!} = {n \choose k}$

$e^x=\sum_{i=0}^\infty \frac{1}{i!}x^i$

Separador horizontal

markdown
Texto antes del separador

---

Texto despues del separador
Renderizado

Texto antes del separador


Texto despues del separador

Diferencias con otros dialectos Markdown

  • Colab usa marked.js (similar pero no identico a GitHub/Jupyter)
  • Soporta ecuaciones MathJax/LaTeX con $...$ para inline y $$...$$ para bloque
  • NO permite HTML dentro del Markdown en celdas de texto
  • NO soporta emojis de GitHub ni checkboxes (to-do lists)

Clase 1 Forms en Google Colab

Controles visuales interactivos. Al cambiar cualquier control, el valor en el codigo de la izquierda se actualiza en tiempo real.

¿Que son los Forms?

Permiten parametrizar codigo con controles visuales interactivos. Se insertan desde Insert → Add form field en una celda de codigo. Al cambiar el valor del control, cambia la variable automaticamente.

Sintaxis general: variable = valor_default # @param {type:"tipo"}

Tipo: String

python
# @title String fields

text = ''  # @param {type:"string"}
dropdown = '1st option'  # @param ["1st option", "2nd option", "3rd option"]
text_and_dropdown = '1st option'  # @param ["1st option", "2nd option"] {allow-input: true}
String fields

Tipo: Number

python
# @title Number fields

number_input = 10.0   # @param {type:"number"}
number_slider = 0.2   # @param {type:"slider", min:-1, max:1, step:0.1}
integer_input = 10    # @param {type:"integer"}
integer_slider = 52   # @param {type:"slider", min:0, max:100, step:1}
Number fields
0.2
52

Tipo: Date

python
# @title Date fields

date_input = '2018-02-21'  # @param {type:"date"}
Date fields

Tipo: Boolean

python
# @title Boolean fields

boolean_checkbox = True   # @param {type:"boolean"}
boolean_dropdown = True   # @param ["False", "True"] {type:"raw"}
Boolean fields

Tipo: Raw

python
# @title Raw fields

raw_input = None      # @param {type:"raw"}
raw_dropdown = None   # @param [1, "raw_input", "False", "'string'"] {type:"raw"}
Raw fields

Markdown dentro de un Form

python
# @title ## Titulo con Markdown
# @markdown Puedes escribir texto Markdown aqui.
# @markdown ---
# @markdown ### Ingresa un valor:
file_path = ""  # @param {type:"string"}
# @markdown ---
Vista previa del form

Titulo con Markdown

Puedes escribir texto Markdown aqui.


Ingresa un valor:


Ejecucion automatica — run: "auto"

python
# @title { run: "auto" }
option = "B"  # @param ["A", "B", "C"]
print('You selected', option)
# Se ejecuta automaticamente al cambiar la seleccion
{ run: "auto" }
You selected B

Jupyter Widgets (interactividad avanzada)

python
import ipywidgets as widgets
from IPython.display import display

# Boton
button = widgets.Button(description="Click Me!")
output = widgets.Output()

def on_button_clicked(b):
    with output:
        print("Button clicked.")

button.on_click(on_button_clicked)
display(button, output)

# Slider
slider = widgets.IntSlider(value=5, max=10)
display(slider)
slider.value  # accede al valor actual

Clase 2 Pandas — Series y DataFrame

Estructuras fundamentales de datos en Pandas.

Importar Pandas y NumPy

python
import pandas as pd
import numpy as np

pd.Series() — Serie unidimensional

Estructura similar a un array de una sola dimension. Cada elemento tiene un indice asociado.

Sintaxis: pd.Series(data, index=index)

  • data: lista, array de NumPy, diccionario o escalar
  • index: (opcional) lista de etiquetas para los indices
python
# Serie basica (indice automatico 0, 1, 2...)
serie = pd.Series([1, 3, -4, 7])

# Serie con indice personalizado (la diferencia clave con numpy arrays)
serie = pd.Series([1, 3, -4, 7], index=['d', 'c', 'b', 'a'])

# Serie desde diccionario
serie = pd.Series({'a': 1, 'b': 2, 'c': 3})

pd.DataFrame() — Estructura tabular

Estructura bidimensional con filas y columnas etiquetadas.

Sintaxis: pd.DataFrame(data, columns=col, index=idx)

python
# Desde diccionario (la forma mas comun)
df = pd.DataFrame({
    'Nombre': ['Ana', 'Luis', 'Maria'],
    'Edad': [23, 25, 22],
    'Ciudad': ['Santiago', 'Valparaiso', 'Concepcion']
})

# Desde lista de listas
df = pd.DataFrame(
    [['Ana', 23], ['Luis', 25]],
    columns=['Nombre', 'Edad']
)

Cargar datos externos

python
# Desde CSV
data = pd.read_csv("archivo.csv")

# Desde Excel
data = pd.read_excel("archivo.xlsx")

# Desde JSON
data = pd.read_json("archivo.json")

# Montar Google Drive en Colab primero:
from google.colab import drive
drive.mount('/content/drive')

Dataset de ejemplo — Starbucks (starbucks.csv)

77 filas, 7 columnas:

ColumnaTipoDescripcion
itemstringNombre del producto
caloriesintCalorias
fatfloatGrasa en gramos
carbintCarbohidratos
fiberintFibra
proteinintProteinas
typecategorybakery, bistro box, hot breakfast, lunch, parfait, petite, salad, sandwich, snack, yogurt

Clase 2 Exploracion y Seleccion

Metodos para explorar y seleccionar datos en DataFrames.

Metodos de exploracion basica

python
data.head(5)       # primeras 5 filas (n por defecto)
data.tail(5)       # ultimas 5 filas
data.shape         # tupla (filas, columnas) — ATRIBUTO sin ()
data.columns       # nombres de todas las columnas
data.index         # indices del DataFrame
data.info()        # estructura: tipos de dato y valores no nulos
data.describe()    # resumen estadistico: count, mean, std, min, 25%, 50%, 75%, max
data.dtypes        # tipo de dato de cada columna
.shape es un ATRIBUTO (sin parentesis). .info() y .describe() son METODOS (con parentesis).

Seleccion de columnas

python
data["columna"]              # una columna → retorna Series
data[["col1", "col2"]]       # multiples columnas → retorna DataFrame

Seleccion por posicion — .iloc[] (Integer Location)

python
data.iloc[0]           # primera fila (todas las columnas)
data.iloc[0, 1]        # fila 0, columna 1 (un valor)
data.iloc[0:3, 1:4]    # filas 0-2, columnas 1-3 (slicing)
data.iloc[[0, 2], :]   # filas 0 y 2, todas las columnas
data.iloc[:, 1]        # todas las filas, columna 1

Seleccion por etiqueta — .loc[] (Label Location)

python
data.loc[0]                        # fila con indice 0
data.loc[0, "Nombre"]              # fila 0, columna "Nombre"
data.loc[0:2, ["Nombre", "Edad"]]  # filas 0-2, columnas especificas
data.loc[[0, 2], :]               # filas 0 y 2
data.loc[:, "Edad"]               # columna "Edad" completa
data.loc[data["Edad"] > 25]       # filas donde Edad > 25 (filtro con loc)

Acceso a un valor unico — .at[] y .iat[]

python
data.at[0, "Nombre"]    # por etiqueta — mas rapido que .loc para un solo valor
data.iat[0, 1]          # por posicion — mas rapido que .iloc para un solo valor

Clase 2-3 Filtros y Operaciones

Filtrado, ordenamiento y agregacion de datos.

Filtros simples

python
# Por igualdad
filtro = data["Location"] == 'In-store'
data[filtro]

# Por condicion numerica
filtro = data["Total Spent"] > 15
data[filtro]

# Por fecha
filtro = data["Transaction Date"] == '2023-07-15'
data[filtro]

Filtros con dos condiciones

python
# AND — ambas deben cumplirse (usar & y parentesis)
filtro = (data["Location"] == 'Takeaway') & (data["Payment Method"] == 'Credit Card')
data[filtro]

# OR — al menos una se cumple (usar |)
filtro = (data["Location"] == 'In-store') | (data["Location"] == 'Takeaway')
data[filtro]
Cada condicion entre parentesis. Usar & y | (NO and / or)

Filtro con .isin() — valores en una lista

python
data[data["Nombre"].isin(["Ana", "Carlos", "Maria"])]
data[data["tipo"].isin(["bakery", "salad"])]

Ordenamiento

python
data.sort_values(by='Total Spent', ascending=False)   # mayor a menor
data.sort_values(by='Quantity', ascending=True)        # menor a mayor

# Multiples columnas
data.sort_values(by=['Edad', 'Nombre'], ascending=[True, False])

# Por indice
data.sort_index(ascending=True)

Metodos de agregacion

python
data["Total Spent"].sum()          # suma total
data["Total Spent"].mean()         # promedio
data["Total Spent"].min()          # minimo
data["Total Spent"].max()          # maximo
data["Total Spent"].count()        # conteo de no-nulos
data["Payment Method"].unique()    # array de valores unicos
data["Payment Method"].value_counts()  # conteo de cada valor unico
data.describe()                    # resumen estadistico completo

groupby() — agrupar y agregar

Patron: data.groupby('columna_cat')['columna_valor'].funcion()

python
# Total por metodo de pago
data.groupby('Payment Method')['Total Spent'].sum()

# Numero de transacciones por ubicacion
data.groupby('Location')['Transaction ID'].count()

# Gasto promedio por ubicacion
data.groupby('Location')['Total Spent'].mean()

# Cantidad total vendida por producto
data.groupby('Item')['Quantity'].sum()

# Varias funciones a la vez con .agg()
data.groupby('Sexo').agg({'Edad': 'mean', 'Salario': 'sum'})

Clase 3 Limpieza de Datos

Manejo de nulos, conversion de tipos, transformaciones y merge.

Manejo de valores nulos

python
data.isnull()              # mascara booleana True donde hay NaN
data.notnull()             # inverso: True donde NO hay NaN
data.isnull().any()        # columnas que tienen al menos un nulo
data.isnull().sum()        # cantidad de nulos por columna

data.dropna()                          # elimina filas con cualquier NaN
data.dropna(subset=["columna"])        # elimina solo si NaN en esa columna
data["Col"].fillna(data["Col"].mean()) # rellena NaN con el promedio
data["Col"].fillna("DESCONOCIDO")      # rellena NaN con texto
data.fillna(0)                         # rellena todos los NaN con 0

Conversion de tipos de dato

python
# Convertir a numero (errors='coerce' → valores invalidos se vuelven NaN)
data["Total Spent"] = pd.to_numeric(data["Total Spent"], errors='coerce')
data["Quantity"] = pd.to_numeric(data["Quantity"], errors='coerce')

# Convertir a fecha
data["Fecha"] = pd.to_datetime(data["Fecha"], errors='coerce')

# Convertir con astype
data["Edad"] = data["Edad"].astype(float)
data["Edad"] = data["Edad"].astype(int)
data["Categoria"] = data["Categoria"].astype(str)
El dataset dirty_cafe_sales.csv tiene columnas numericas guardadas como texto (object). Por eso hay que convertirlas antes de operar.

Agregar columna nueva

python
data["Descuento"] = data["Total Spent"] * 0.10
data["Categoria"] = np.where(data["Total Spent"] > 15, "Alto", "Normal")

np.where() — operacion condicional

python
# Si condicion → A, si no → B
np.where(df['Edad'] >= 18, 'Adulto', 'Menor')
np.where(df['col'] > x, 'alto', 'bajo')

Agregar filas y eliminar duplicados

python
# Agregar filas
nueva_fila = pd.DataFrame([{"Col1": "valor", "Col2": 10}])
data = pd.concat([data, nueva_fila], ignore_index=True)

# Eliminar duplicados
data.drop_duplicates()                    # filas 100% duplicadas
data.drop_duplicates(subset=["columna"])  # duplicados en una columna

Eliminar y renombrar columnas

python
# Eliminar columna
del data["columna"]
data.drop(columns=["columna"])

# Renombrar columnas
data.rename(columns={'old_name': 'new_name', 'Col1': 'Columna_1'})

# Copiar DataFrame (copia independiente)
data2 = data.copy()

Resetear y establecer indice

python
data.reset_index()              # mueve indice a columna
data.reset_index(drop=True)     # reinicia sin conservar indice anterior
data.reset_index(inplace=True)  # modifica el DataFrame original
data.set_index('columna')       # establece una columna como indice

Transformar valores con .map() y .apply()

python
# .map() → transforma segun un diccionario
data['Sexo'] = data['Sexo'].map({'M': 'Masculino', 'F': 'Femenino'})

# .apply() → aplica una funcion a cada elemento
data['Longitud'] = data['Nombre'].apply(len)
data['Mayuscula'] = data['Nombre'].apply(lambda x: x.upper())

pd.merge() — unir DataFrames

python
# inner: solo coincidencias en ambos
pd.merge(df1, df2, on='columna_clave', how='inner')

# outer: todos los registros de ambos
pd.merge(df1, df2, on='columna_clave', how='outer')

# left: todos de df1, coincidencias de df2
pd.merge(df1, df2, on='columna_clave', how='left')

# right: todos de df2, coincidencias de df1
pd.merge(df1, df2, on='columna_clave', how='right')

# Columnas con nombre diferente en cada df
pd.merge(df1, df2, left_on='codigo', right_on='id', how='inner')

Clase 3 Caso de Estudio — dirty_cafe_sales.csv

Cadena de cafeterias en USA. 10,000 filas, 8 columnas. Dataset con datos sucios.

Columnas del dataset

ColumnaDescripcionProblemas
Transaction IDIdentificador unico
ItemProducto: Coffee, Tea, Juice, Sandwich, Salad, Cookie, Cake, Smoothie
QuantityCantidad compradaNulos y texto
Price Per UnitPrecio unitarioNulos y texto
Total SpentTotal gastadoNulos, "ERROR", "UNKNOWN"
Payment MethodCash, Credit Card, Digital Wallet~2579 nulos
LocationIn-store, Takeaway~3265 nulos
Transaction DateFecha (YYYY-MM-DD)

Codigo de carga y limpieza

python
import pandas as pd

data = pd.read_csv("dirty_cafe_sales.csv")

# Revisar estructura
data.info()
data.head(10)

# Convertir columnas numericas
data['Total Spent'] = pd.to_numeric(data['Total Spent'], errors='coerce')
data['Quantity'] = pd.to_numeric(data['Quantity'], errors='coerce')
data['Price Per Unit'] = pd.to_numeric(data['Price Per Unit'], errors='coerce')

# Verificar nulos
data.isnull().sum()

16 Objetivos del analisis — Respuestas completas

python
# 1. Resumen estadistico
data.describe()

# 2. Total de dinero gastado
data["Total Spent"].sum()

# 3. Promedio de gasto por transaccion
data["Total Spent"].mean()

# 4. Metodos de pago disponibles
data["Payment Method"].unique()

# 5. Transacciones por metodo de pago
data["Payment Method"].value_counts()

# 6. Transacciones en "In-store"
filtro = data["Location"] == 'In-store'
data[filtro]

# 7. Transacciones con gasto > $15
filtro = data["Total Spent"] > 15
data[filtro]

# 8. Takeaway con Credit Card
filtro = (data["Location"] == 'Takeaway') & (data["Payment Method"] == 'Credit Card')
data[filtro]

# 9. Transacciones en efectivo (Cash)
filtro = data["Payment Method"] == 'Cash'
data[filtro]

# 10. Transacciones del dia 2023-07-15
filtro = data["Transaction Date"] == '2023-07-15'
data[filtro]

# 11. Ordenar de mayor a menor gasto
data.sort_values(by='Total Spent', ascending=False)

# 12. Ordenar por cantidad (ascendente)
data.sort_values(by='Quantity', ascending=True)

# 13. Total gastado por metodo de pago
data.groupby('Payment Method')['Total Spent'].sum()

# 14. Transacciones por location
data.groupby('Location')['Transaction ID'].count()

# 15. Gasto promedio por location
data.groupby('Location')['Total Spent'].mean()

# 16. Articulos vendidos por tipo de producto
data['Quantity'] = pd.to_numeric(data['Quantity'], errors='coerce')
data.groupby('Item')['Quantity'].sum()

Referencia Cheat Sheet Pandas

Todos los metodos organizados por categoria.

Creacion de estructuras

MetodoDescripcionEjemplo
pd.Series(data, index=idx)Crea serie unidimensionalpd.Series([1,3,-4,7], index=['a','b','c','d'])
pd.DataFrame(data)Crea tabla bidimensionalpd.DataFrame({'Nombre':['Ana'],'Edad':[23]})
pd.read_csv('archivo.csv')Lee archivo CSVdf = pd.read_csv('datos.csv')
pd.read_excel('archivo.xlsx')Lee archivo Exceldf = pd.read_excel('datos.xlsx')

Exploracion

MetodoDescripcionEjemplo
.head(n)Primeras n filasdf.head(3)
.tail(n)Ultimas n filasdf.tail(3)
.shapeTupla (filas, cols) — atributofilas, cols = df.shape
.columnsNombres de columnasprint(df.columns)
.indexIndices del DataFrameprint(df.index)
.info()Tipos de dato y nulosdf.info()
.describe()Resumen estadisticodf.describe()
.dtypesTipos de todas las columnasprint(df.dtypes)
df['col'].dtypeTipo de una columnadf['Edad'].dtype

Seleccion

MetodoDescripcionEjemplo
df['col']Una columna (Series)df['Nombre']
df[['c1','c2']]Multiples columnasdf[['Nombre','Edad']]
.iloc[fila, col]Por posicion numericadf.iloc[0, 1]
.loc[fila, col]Por etiquetadf.loc[0, 'Nombre']
.at[fila, col]Un valor por etiqueta (rapido)df.at[0, 'Nombre']
.iat[fila, col]Un valor por posicion (rapido)df.iat[0, 1]

Filtros

MetodoDescripcionEjemplo
df[condicion]Filtro simpledf[df['Edad'] > 24]
df[(c1) & (c2)]AND — ambas condicionesdf[(df['Edad']>24) & (df['Nombre']=='Luis')]
df[(c1) | (c2)]OR — al menos unadf[(df['Edad']<20) | (df['Edad']>60)]
.isin([val1, val2])Esta en listadf[df['Nombre'].isin(['Ana','Carlos'])]
.loc[df['col'] cond]Filtro con locdf.loc[df['Edad'] > 25]

Ordenamiento

MetodoDescripcionEjemplo
.sort_values(by='col')Ordena por columnadf.sort_values(by='Edad', ascending=False)
.sort_values(by=[c1,c2])Ordena por multiples colsdf.sort_values(by=['Edad','Nombre'])
.sort_index()Ordena por indicedf.sort_index()

Agregacion

MetodoDescripcionEjemplo
.sum()Sumadf['Edad'].sum()
.mean()Promediodf['Edad'].mean()
.min() / .max()Minimo / Maximodf['Edad'].min()
.count()Conteo no-nulosdf['Edad'].count()
.unique()Valores unicosdf['Tipo'].unique()
.value_counts()Frecuencia de valores unicosdf['Tipo'].value_counts()
.groupby('col')Agrupa por columnadf.groupby('Sexo')['Edad'].mean()
.agg({'col': 'func'})Multiples funcionesdf.groupby('Sexo').agg({'Edad': 'mean'})
pd.crosstab(c1, c2)Tabla de contingenciapd.crosstab(df['Sexo'], df['Sobreviviente'])

Limpieza

MetodoDescripcionEjemplo
.isnull()Mascara de nulosdf['col'].isnull()
.notnull()Mascara de no-nulosdf[df['col'].notnull()]
.dropna()Elimina filas con NaNdf.dropna(subset=['col'])
.fillna(val)Rellena NaNdf.fillna(0)
pd.to_numeric(col, errors='coerce')Convierte a numeropd.to_numeric(df['Total'], errors='coerce')
pd.to_datetime(col)Convierte a fechapd.to_datetime(df['Fecha'])
.astype(tipo)Cambia tipo de datodf['Edad'].astype(float)
.drop_duplicates()Elimina duplicadosdf.drop_duplicates()
.rename(columns={})Renombra columnasdf.rename(columns={'old':'new'})
.copy()Copia el DataFramedf2 = df.copy()

Transformacion

MetodoDescripcionEjemplo
.map(diccionario)Transforma segun dictdf['Sexo'].map({'M':'Masculino'})
.apply(func)Aplica funciondf['Nombre'].apply(len)
np.where(cond, A, B)Condicional vectorizadonp.where(df['Edad']>=18,'Adulto','Menor')
pd.cut(col, bins)Agrupa en intervalospd.cut(df['Edad'], bins=[0,18,65,100])
.reset_index()Reinicia indicedf.reset_index(drop=True)
.set_index('col')Columna como indicedf.set_index('Nombre')

Merge / Union

MetodoDescripcionEjemplo
pd.merge(df1, df2, on='col', how='inner')Inner joinSolo coincidencias en ambos
pd.merge(..., how='outer')Outer joinTodos de ambos DataFrames
pd.merge(..., how='left')Left joinTodos de df1
pd.merge(..., how='right')Right joinTodos de df2
pd.merge(df1, df2, left_on='a', right_on='b')Columnas distintasUne por nombres diferentes

Exportar

MetodoDescripcionEjemplo
df.to_excel('archivo.xlsx', index=False)Exporta a Exceldf.to_excel('datos.xlsx', index=False)
df.to_csv('archivo.csv', index=False)Exporta a CSVdf.to_csv('datos.csv')

15 preguntas Simulacro de Quiz

Haz clic en cada pregunta para revelar la respuesta.

1¿Como se escribe un titulo de nivel 2 en Markdown?
## Mi titulo — dos signos # seguidos del texto.
2¿Como pones texto en negrita y cursiva en Markdown?
Negrita: **texto** | Cursiva: *texto* o _texto_
3¿Como creas un dropdown de seleccion en un Form de Colab?
variable = '1st option' # @param ["1st option", "2nd option", "3rd option"]
4¿Que hace data.describe()?
Entrega resumen estadistico de columnas numericas: count, mean, std, min, 25%, 50% (mediana), 75%, max.
5¿Cual es la diferencia entre .shape e .info()?
.shape es atributo (sin parentesis) que retorna tupla (filas, columnas). .info() es metodo que muestra tipos de dato y cantidad de valores no nulos de cada columna.
6¿Cual es la diferencia entre .iloc[] y .loc[]?
.iloc[] selecciona por posicion numerica (0, 1, 2...). .loc[] selecciona por etiqueta (nombre del indice o columna).
7¿Como filtras transacciones donde "Total Spent" es mayor a $15?
filtro = data["Total Spent"] > 15 seguido de data[filtro]
8¿Como filtras por dos condiciones (Location='Takeaway' Y Payment='Credit Card')?
filtro = (data["Location"] == 'Takeaway') & (data["Payment Method"] == 'Credit Card') — cada condicion entre parentesis, usar & no and
9¿Como calculas el total gastado por cada metodo de pago?
data.groupby('Payment Method')['Total Spent'].sum()
10¿Para que sirve errors='coerce' en pd.to_numeric()?
Convierte valores que no se pueden transformar a numero (como "ERROR" o "UNKNOWN") en NaN, en vez de lanzar un error.
11¿Que hace .value_counts() y cuando lo usas?
Cuenta cuantas veces aparece cada valor unico en una columna. Se usa en columnas categoricas como "Payment Method" o "Item" para ver distribucion.
12¿Como ordenas un DataFrame de mayor a menor por "Quantity"?
data.sort_values(by='Quantity', ascending=False)
13¿Como se hace un slider numerico en un Form de Colab?
valor = 0.5 # @param {type:"slider", min:0, max:1, step:0.1}
14¿Cual es la diferencia entre pd.Series() y pd.DataFrame()?
Series es unidimensional (una sola columna con indice). DataFrame es bidimensional (tabla con filas y columnas, como una hoja de calculo).
15¿Que hace pd.merge(df1, df2, on='col', how='left')?
Une df1 y df2 por la columna 'col'. Con how='left': incluye TODOS los registros de df1 y solo los que coinciden de df2 (los que no coinciden quedan con NaN).
Panel de Pruebas
Editor  |  Preview