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
- Recoleccion de datos — obtener datos de diversas fuentes
- Limpieza y preparacion — manejar nulos, duplicados, tipos incorrectos
- Exploracion y analisis — explorar patrones, tendencias, relaciones
- Visualizacion — representar graficamente los hallazgos
- 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
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.
Formato de texto
**texto en negrita** *texto en cursiva* _tambien cursiva_ `codigo monoespaciado` ~~texto tachado~~ [un link](https://colab.google) 
texto en negrita
texto en cursiva
tambien cursiva
codigo monoespaciado
texto tachado
![imagen] → inserta una imagen desde URL
Encabezados — generan el indice lateral de Colab
# Titulo H1 ## Subtitulo H2 ### Sub-subtitulo H3
Titulo H1
Subtitulo H2
Sub-subtitulo H3
Listas ordenadas, no ordenadas y blockquotes
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
Ordenada:
- Primero
- Segundo
- Tercero
No ordenada:
- item uno
- item dos
- tambien con guion
Blockquote:
Un nivelDos niveles
Bloques de codigo
```python
import pandas as pd
df = pd.read_csv("datos.csv")
print(df.head())
```
import pandas as pd
df = pd.read_csv("datos.csv")
print(df.head())
Tablas
Columna 1 | Columna 2 ----------|---------- Valor A | Valor B Valor C | Valor D
| Columna 1 | Columna 2 |
|---|---|
| Valor A | Valor B |
| Valor C | Valor D |
Ecuaciones LaTeX (MathJax)
$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$
$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
Texto antes del separador --- Texto despues del separador
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.
variable = valor_default # @param {type:"tipo"}Tipo: String
# @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}
Tipo: Number
# @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}
Tipo: Date
# @title Date fields date_input = '2018-02-21' # @param {type:"date"}
Tipo: Boolean
# @title Boolean fields boolean_checkbox = True # @param {type:"boolean"} boolean_dropdown = True # @param ["False", "True"] {type:"raw"}
Tipo: Raw
# @title Raw fields raw_input = None # @param {type:"raw"} raw_dropdown = None # @param [1, "raw_input", "False", "'string'"] {type:"raw"}
Markdown dentro de un Form
# @title ## Titulo con Markdown # @markdown Puedes escribir texto Markdown aqui. # @markdown --- # @markdown ### Ingresa un valor: file_path = "" # @param {type:"string"} # @markdown ---
Titulo con Markdown
Puedes escribir texto Markdown aqui.
Ingresa un valor:
Ejecucion automatica — run: "auto"
# @title { run: "auto" } option = "B" # @param ["A", "B", "C"] print('You selected', option) # Se ejecuta automaticamente al cambiar la seleccion
Jupyter Widgets (interactividad avanzada)
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
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 escalarindex: (opcional) lista de etiquetas para los indices
# 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)
# 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
# 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:
| Columna | Tipo | Descripcion |
|---|---|---|
item | string | Nombre del producto |
calories | int | Calorias |
fat | float | Grasa en gramos |
carb | int | Carbohidratos |
fiber | int | Fibra |
protein | int | Proteinas |
type | category | bakery, 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
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
data["columna"] # una columna → retorna Series data[["col1", "col2"]] # multiples columnas → retorna DataFrame
Seleccion por posicion — .iloc[] (Integer Location)
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)
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[]
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
# 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
# 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]
& y | (NO and / or)Filtro con .isin() — valores en una lista
data[data["Nombre"].isin(["Ana", "Carlos", "Maria"])] data[data["tipo"].isin(["bakery", "salad"])]
Ordenamiento
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
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()
# 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
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
# 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)
dirty_cafe_sales.csv tiene columnas numericas guardadas como texto (object). Por eso hay que convertirlas antes de operar.Agregar columna nueva
data["Descuento"] = data["Total Spent"] * 0.10 data["Categoria"] = np.where(data["Total Spent"] > 15, "Alto", "Normal")
np.where() — operacion condicional
# 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
# 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
# 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
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()
# .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
# 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
| Columna | Descripcion | Problemas |
|---|---|---|
Transaction ID | Identificador unico | — |
Item | Producto: Coffee, Tea, Juice, Sandwich, Salad, Cookie, Cake, Smoothie | — |
Quantity | Cantidad comprada | Nulos y texto |
Price Per Unit | Precio unitario | Nulos y texto |
Total Spent | Total gastado | Nulos, "ERROR", "UNKNOWN" |
Payment Method | Cash, Credit Card, Digital Wallet | ~2579 nulos |
Location | In-store, Takeaway | ~3265 nulos |
Transaction Date | Fecha (YYYY-MM-DD) | — |
Codigo de carga y limpieza
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
# 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
| Metodo | Descripcion | Ejemplo |
|---|---|---|
pd.Series(data, index=idx) | Crea serie unidimensional | pd.Series([1,3,-4,7], index=['a','b','c','d']) |
pd.DataFrame(data) | Crea tabla bidimensional | pd.DataFrame({'Nombre':['Ana'],'Edad':[23]}) |
pd.read_csv('archivo.csv') | Lee archivo CSV | df = pd.read_csv('datos.csv') |
pd.read_excel('archivo.xlsx') | Lee archivo Excel | df = pd.read_excel('datos.xlsx') |
Exploracion
| Metodo | Descripcion | Ejemplo |
|---|---|---|
.head(n) | Primeras n filas | df.head(3) |
.tail(n) | Ultimas n filas | df.tail(3) |
.shape | Tupla (filas, cols) — atributo | filas, cols = df.shape |
.columns | Nombres de columnas | print(df.columns) |
.index | Indices del DataFrame | print(df.index) |
.info() | Tipos de dato y nulos | df.info() |
.describe() | Resumen estadistico | df.describe() |
.dtypes | Tipos de todas las columnas | print(df.dtypes) |
df['col'].dtype | Tipo de una columna | df['Edad'].dtype |
Seleccion
| Metodo | Descripcion | Ejemplo |
|---|---|---|
df['col'] | Una columna (Series) | df['Nombre'] |
df[['c1','c2']] | Multiples columnas | df[['Nombre','Edad']] |
.iloc[fila, col] | Por posicion numerica | df.iloc[0, 1] |
.loc[fila, col] | Por etiqueta | df.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
| Metodo | Descripcion | Ejemplo |
|---|---|---|
df[condicion] | Filtro simple | df[df['Edad'] > 24] |
df[(c1) & (c2)] | AND — ambas condiciones | df[(df['Edad']>24) & (df['Nombre']=='Luis')] |
df[(c1) | (c2)] | OR — al menos una | df[(df['Edad']<20) | (df['Edad']>60)] |
.isin([val1, val2]) | Esta en lista | df[df['Nombre'].isin(['Ana','Carlos'])] |
.loc[df['col'] cond] | Filtro con loc | df.loc[df['Edad'] > 25] |
Ordenamiento
| Metodo | Descripcion | Ejemplo |
|---|---|---|
.sort_values(by='col') | Ordena por columna | df.sort_values(by='Edad', ascending=False) |
.sort_values(by=[c1,c2]) | Ordena por multiples cols | df.sort_values(by=['Edad','Nombre']) |
.sort_index() | Ordena por indice | df.sort_index() |
Agregacion
| Metodo | Descripcion | Ejemplo |
|---|---|---|
.sum() | Suma | df['Edad'].sum() |
.mean() | Promedio | df['Edad'].mean() |
.min() / .max() | Minimo / Maximo | df['Edad'].min() |
.count() | Conteo no-nulos | df['Edad'].count() |
.unique() | Valores unicos | df['Tipo'].unique() |
.value_counts() | Frecuencia de valores unicos | df['Tipo'].value_counts() |
.groupby('col') | Agrupa por columna | df.groupby('Sexo')['Edad'].mean() |
.agg({'col': 'func'}) | Multiples funciones | df.groupby('Sexo').agg({'Edad': 'mean'}) |
pd.crosstab(c1, c2) | Tabla de contingencia | pd.crosstab(df['Sexo'], df['Sobreviviente']) |
Limpieza
| Metodo | Descripcion | Ejemplo |
|---|---|---|
.isnull() | Mascara de nulos | df['col'].isnull() |
.notnull() | Mascara de no-nulos | df[df['col'].notnull()] |
.dropna() | Elimina filas con NaN | df.dropna(subset=['col']) |
.fillna(val) | Rellena NaN | df.fillna(0) |
pd.to_numeric(col, errors='coerce') | Convierte a numero | pd.to_numeric(df['Total'], errors='coerce') |
pd.to_datetime(col) | Convierte a fecha | pd.to_datetime(df['Fecha']) |
.astype(tipo) | Cambia tipo de dato | df['Edad'].astype(float) |
.drop_duplicates() | Elimina duplicados | df.drop_duplicates() |
.rename(columns={}) | Renombra columnas | df.rename(columns={'old':'new'}) |
.copy() | Copia el DataFrame | df2 = df.copy() |
Transformacion
| Metodo | Descripcion | Ejemplo |
|---|---|---|
.map(diccionario) | Transforma segun dict | df['Sexo'].map({'M':'Masculino'}) |
.apply(func) | Aplica funcion | df['Nombre'].apply(len) |
np.where(cond, A, B) | Condicional vectorizado | np.where(df['Edad']>=18,'Adulto','Menor') |
pd.cut(col, bins) | Agrupa en intervalos | pd.cut(df['Edad'], bins=[0,18,65,100]) |
.reset_index() | Reinicia indice | df.reset_index(drop=True) |
.set_index('col') | Columna como indice | df.set_index('Nombre') |
Merge / Union
| Metodo | Descripcion | Ejemplo |
|---|---|---|
pd.merge(df1, df2, on='col', how='inner') | Inner join | Solo coincidencias en ambos |
pd.merge(..., how='outer') | Outer join | Todos de ambos DataFrames |
pd.merge(..., how='left') | Left join | Todos de df1 |
pd.merge(..., how='right') | Right join | Todos de df2 |
pd.merge(df1, df2, left_on='a', right_on='b') | Columnas distintas | Une por nombres diferentes |
Exportar
| Metodo | Descripcion | Ejemplo |
|---|---|---|
df.to_excel('archivo.xlsx', index=False) | Exporta a Excel | df.to_excel('datos.xlsx', index=False) |
df.to_csv('archivo.csv', index=False) | Exporta a CSV | df.to_csv('datos.csv') |
15 preguntas Simulacro de Quiz
Haz clic en cada pregunta para revelar la respuesta.
## Mi titulo — dos signos # seguidos del texto.**texto** | Cursiva: *texto* o _texto_variable = '1st option' # @param ["1st option", "2nd option", "3rd option"]data.describe()?.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..iloc[] y .loc[]?.iloc[] selecciona por posicion numerica (0, 1, 2...). .loc[] selecciona por etiqueta (nombre del indice o columna).filtro = data["Total Spent"] > 15 seguido de data[filtro]filtro = (data["Location"] == 'Takeaway') & (data["Payment Method"] == 'Credit Card') — cada condicion entre parentesis, usar & no anddata.groupby('Payment Method')['Total Spent'].sum()errors='coerce' en pd.to_numeric()?.value_counts() y cuando lo usas?data.sort_values(by='Quantity', ascending=False)valor = 0.5 # @param {type:"slider", min:0, max:1, step:0.1}pd.Series() y pd.DataFrame()?pd.merge(df1, df2, on='col', how='left')?