La solicitud

De Priya Shah, Directora de Datos
Tu objetivo
Elige la afirmación que es verdadera.
Lo que recibe Priya, y por qué
La lección
Por qué importa esta distinción
pandas tiene dos objetos principales, y casi todos los errores confusos de tus primeras semanas vienen de tener uno cuando esperabas el otro.
Una Series es una columna: valores más un índice. Tiene un solo dtype y un name (el nombre de la
columna). Las Series tienen métodos para trabajar con valores, como .value_counts(), .unique(),
.str.lower(), .dt.year, .map() y .between().
Un DataFrame es una tabla de una o más columnas que comparten un índice. Los DataFrames tienen
métodos para trabajar con tablas, como .merge(), .groupby() con varias columnas,
.sort_values(by=...), .drop_duplicates(subset=...) y .to_csv().
La regla
orders["status"] # Series
orders[["status"]] # DataFrame, 1 column
orders[["status", "channel"]] # DataFrame, 2 columns
Los corchetes interiores crean una lista de Python. Siempre que seleccionas con una lista, obtienes un DataFrame, aunque la lista contenga un solo nombre.
Comprobar lo que tienes
En caso de duda, pregúntale a Python:
type(orders["status"]) # pandas.core.series.Series
type(orders[["status"]]) # pandas.core.frame.DataFrame
orders[["status"]].shape # (12000, 1)
orders["status"].shape # (12000,) one dimension only
El shape es un buen indicador: una Series tiene un shape de un elemento, un DataFrame siempre tiene dos.
Un modelo mental útil
Piensa en un DataFrame como un diccionario de Series que comparten el mismo índice. Pedir una clave
(orders["status"]) te entrega esa Series. Pedir con una lista de claves te entrega un diccionario más
pequeño, que sigue siendo un DataFrame. Esto también explica por qué añadir una columna se parece a
añadir una clave de diccionario: orders["is_web"] = orders["channel"] == "web".
Convertir entre ellos
orders[["status"]].squeeze() # one-column DataFrame to Series
orders["status"].to_frame() # Series to one-column DataFrame
Dónde da problemas
orders[["status"]].value_counts()funciona, pero devuelve conteos indexados por un MultiIndex de un nivel, que se imprime y se une de forma distinta aorders["status"].value_counts().- Los accesores
.stry.dtexisten solo en las Series. - Asignar una columna nueva necesita una Series (o una lista o un solo valor) en el lado derecho, no un DataFrame.
- Muchos resultados de agregación son Series.
orders.groupby("channel")["shipping_fee"].mean()es una Series indexada por canal; añade.reset_index()para convertirla en una tabla de dos columnas.
Acertar con esto también hace fáciles de seguir los enunciados de las tareas de este juego: cuando un nivel pide una Series, devuelve los valores de una columna; cuando pide un DataFrame con columnas con nombre, devuelve una tabla con exactamente esas columnas.
¡Linterna encendida!
Practicaste: seriesdataframecolumn selection
- Resuelto
- Sin pistas
- Al primer intento
