La solicitud

De Logan Brooks, Especialista en Email Marketing
Tu objetivo
Asigna a result un DataFrame con las primeras 20 filas de customers y exactamente las columnas customer_id, email, state, segment, en ese orden. Conserva el índice original.
- Usa el DataFrame
customerspendiente - Muestra exactamente
customer_idemailstatesegmentpendiente - 20 filas, ordenadas como se pidependiente
Tu código
Cargando el editor…
Solución de referencia
| customer_id | first_name | last_name | city | |
|---|---|---|---|---|
| 1 | Owen | Hudson | owen.hudson@icloud.com | San Francisco |
| 2 | Douglas | Mendoza | dmendoza69@gmail.com | Atlanta |
| 3 | Henry | Brooks | hbrooks@lakesidecafe.com | Los Angeles |
| 4 | Brian | Graham | bgraham@bluecedarhomes.com | Seattle |
Mote revisa tu resultado
Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.
Lo que recibe Logan, y por qué
DataFrames
Cargados como DataFrames de pandas, junto con pd y np.
customers2,018 filas · 9 columnas
customer_idintegerfirst_namevarcharlast_namevarcharemailvarcharcityvarcharstatevarcharsignup_datedatesegmentvarcharreferral_sourcevarchar
| customer_id | first_name | last_name | city | state | signup_date | segment | referral_source | |
|---|---|---|---|---|---|---|---|---|
| 1 | Owen | Hudson | owen.hudson@icloud.com | San Francisco | CA | 2022-06-02 | consumer | search |
| 2 | Douglas | Mendoza | dmendoza69@gmail.com | Atlanta | GA | 2022-06-02 | consumer | NaN |
| 3 | Henry | Brooks | hbrooks@lakesidecafe.com | Los Angeles | CA | 2022-06-04 | business | NaN |
| 4 | Brian | Graham | bgraham@bluecedarhomes.com | Seattle | WA | 2022-06-06 | business | |
| 5 | Kyle | Jimenez | kjimenez27@yahoo.com | Indianapolis | IN | 2022-06-07 | consumer | NaN |
products120 filas · 8 columnas
product_idintegernamevarcharcategoryvarcharsubcategoryvarcharunit_pricedecimalunit_costdecimallaunched_ondateis_activeboolean
| product_id | name | category | subcategory | unit_price | unit_cost | launched_on | is_active |
|---|---|---|---|---|---|---|---|
| 101 | Vale Velvet Loveseat | Furniture | Sofas | 1659.00 | NaN | 2023-09-11 | true |
| 102 | Alder Oak Coffee Table | Furniture | Tables | 919.00 | 503.50 | 2024-05-16 | true |
| 103 | Orchard Rattan Dining Chair | Furniture | Chairs | 789.00 | 429.87 | 2023-05-27 | true |
| 104 | Upland Oak Bookcase | Furniture | Storage | 429.00 | 214.70 | 2022-12-20 | true |
| 105 | Avery Leather Bed Frame | Furniture | Beds | 449.00 | 232.70 | 2021-08-31 | true |
orders12,000 filas · 7 columnas
order_idintegercustomer_idintegerorder_datetimestampstatusvarcharchannelvarcharshipping_feedecimalcoupon_codevarchar
| order_id | customer_id | order_date | status | channel | shipping_fee | coupon_code |
|---|---|---|---|---|---|---|
| 1001 | 125 | 2023-01-01 20:51:19 | completed | web | 0.00 | NaN |
| 1002 | 156 | 2023-01-02 07:58:46 | completed | web | 0.00 | NaN |
| 1003 | 22 | 2023-01-02 10:25:27 | completed | marketplace | 4.99 | WELCOME10 |
| 1004 | 48 | 2023-01-02 11:21:51 | completed | marketplace | 4.99 | WELCOME10 |
| 1005 | 82 | 2023-01-02 11:43:36 | completed | web | 0.00 | WELCOME10 |
order_items30,338 filas · 6 columnas
order_item_idintegerorder_idintegerproduct_idintegerquantityintegerunit_pricedecimaldiscount_pctdecimal
| order_item_id | order_id | product_id | quantity | unit_price | discount_pct |
|---|---|---|---|---|---|
| 1 | 1001 | 121 | 9 | 31.99 | 0.00 |
| 2 | 1001 | 154 | 3 | 11.99 | 0.00 |
| 3 | 1002 | 154 | 4 | 11.99 | 0.00 |
| 4 | 1002 | 194 | 1 | 149.00 | 0.00 |
| 5 | 1002 | 193 | 2 | 19.99 | 0.00 |
returns1,673 filas · 5 columnas
return_idintegerorder_item_idintegerreturned_ondatereasonvarcharrefund_amountdecimal
| return_id | order_item_id | returned_on | reason | refund_amount |
|---|---|---|---|---|
| 1 | 14 | 2023-01-10 | damaged | 83.69 |
| 2 | 42 | 2023-01-10 | wrong_item | 19.99 |
| 3 | 105 | 2023-01-14 | wrong_item | 10.99 |
| 4 | 24 | 2023-01-16 | changed_mind | 26.99 |
| 5 | 126 | 2023-01-16 | late | 20.99 |
employees60 filas · 8 columnas
employee_idintegerfirst_namevarcharlast_namevarchardepartmentvarchartitlevarcharmanager_idintegerhire_datedatesalaryinteger
| employee_id | first_name | last_name | department | title | manager_id | hire_date | salary |
|---|---|---|---|---|---|---|---|
| 1 | Catherine | Hale | Executive | Chief Executive Officer | NaN | 2016-03-01 | 285000 |
| 2 | Robert | Kim | Executive | Chief Operating Officer | 1 | 2017-01-09 | 235000 |
| 3 | Megan | Collins | Sales | Head of Sales | 1 | 2018-04-16 | 172000 |
| 4 | Chloe | Gutierrez | Sales | Account Executive | 3 | 2020-01-21 | 72000 |
| 5 | Frank | Bell | Sales | Account Executive | 3 | 2023-05-21 | 73000 |
web_sessions40,000 filas · 7 columnas
session_idintegercustomer_idintegerstarted_attimestampdevicevarcharsourcevarcharpages_viewedintegerconvertedboolean
| session_id | customer_id | started_at | device | source | pages_viewed | converted |
|---|---|---|---|---|---|---|
| 1 | NaN | 2023-01-01 23:02:24 | mobile | paid | 1 | false |
| 2 | 18 | 2023-01-01 15:07:49 | desktop | paid | 1 | false |
| 3 | NaN | 2023-01-01 16:55:46 | desktop | direct | 7 | false |
| 4 | NaN | 2023-01-01 12:43:28 | mobile | organic | 3 | false |
| 5 | NaN | 2023-01-01 13:06:21 | mobile | social | 2 | false |
marketing_spend3,276 filas · 3 columnas
spend_datedatechannelvarcharamountdecimal
| spend_date | channel | amount |
|---|---|---|
| 2023-01-01 | paid | 492.99 |
| 2023-01-01 | 37.38 | |
| 2023-01-01 | social | 200.53 |
| 2023-01-02 | paid | 709.13 |
| 2023-01-02 | 64.13 |
La lección
Una columna: una Series
Los corchetes con un nombre de columna te dan esa columna:
customers["email"]
El resultado es una Series: una columna de valores más el índice. Las Series tienen sus propios
métodos útiles, como .nunique(), .value_counts() o .str.lower(), que usarás todo el tiempo.
También puedes ver customers.email (acceso con punto). Funciona con nombres simples, pero falla con
nombres con espacios o que chocan con métodos del DataFrame (una columna llamada count o size), y no
puede crear columnas nuevas. El acceso con corchetes siempre funciona, así que haz de él tu costumbre.
Varias columnas: un DataFrame
Para seleccionar más de una columna, pasa una lista de nombres:
customers[["customer_id", "email", "state", "segment"]]
Los corchetes dobles confunden a todo el mundo al principio. Los corchetes exteriores significan «selecciona de este DataFrame». Los interiores son solo la sintaxis de lista de Python. Escribirlo en dos pasos lo aclara:
cols = ["customer_id", "email", "state", "segment"]
customers[cols]
Las columnas vuelven en el orden en que las listas, así que esta también es la forma de reordenar columnas.
Una columna como DataFrame
Una lista con un solo nombre te da un DataFrame de una columna en lugar de una Series:
customers["email"] # Series
customers[["email"]] # DataFrame with one column
Cuál quieres depende de lo que venga después. Los métodos de Series (value_counts, .str) quieren una
Series; exportar una tabla o hacer un merge quiere un DataFrame.
Seleccionar columnas no copia la tabla
La selección es un objeto nuevo. customers en sí sigue teniendo las nueve columnas. Si quieres
conservar la tabla más estrecha, asígnala:
contacts = customers[["customer_id", "email", "state", "segment"]]
Si vas a modificar esa tabla nueva (añadir una columna, cambiar valores), hazla una copia explícita:
contacts = customers[[...]].copy(). Eso evita el SettingWithCopyWarning de pandas y deja claro que
las dos tablas son independientes.
Encontrar columnas por patrón
Cuando una tabla tiene decenas de columnas, filter ayuda:
orders.filter(like="_id") # every column whose name contains "_id"
¿Por qué molestarse en reducir?
Seleccionar solo lo que necesitas hace legibles los resultados, hace más pequeñas las exportaciones y es un hábito de privacidad que conviene tener: una audiencia de marketing no necesita las fechas de alta, y una hoja de cálculo compartida no debería llevar columnas que nadie pidió.
Errores comunes
- Corchetes simples alrededor de una lista de nombres escrita sin la lista interior:
customers["customer_id", "email"]lanzaKeyError, porque pandas busca una sola columna con el nombre de esa pareja. - Erratas y mayúsculas:
customers["Email"]lanzaKeyError: 'Email'. - Esperar que
customers[["email"]]sea una Series y llamar a.strsobre ella.
¡Linterna encendida!
Practicaste: column selectionseriesdataframedouble brackets
- Resuelto
- Sin pistas
- Al primer intento
