La solicitud

De Priya Shah, Directora de Datos
Tu objetivo
Carga csv_text con pd.read_csv(io.StringIO(csv_text), parse_dates=["received_on"]). Asigna a result un diccionario que asocie cada nombre de columna con su dtype como string, tal como lo devuelve df.dtypes.astype(str).to_dict().
- Guarda un dict en
resultpendiente
Tu código
Cargando el editor…
Solución de referencia
Mote revisa tu resultado
Presiona Ejecutar. Cada fila que cumple el objetivo se vuelve una luciérnaga en tu linterna.
Lo que recibe Priya, y por qué
La lección
Leer texto CSV con read_csv
pd.read_csv es como empieza casi todo análisis. Normalmente le das una ruta, como
pd.read_csv("orders.csv"). Las tablas de Harbor & Pine de este juego se cargaron exactamente así, por
eso orders y products ya están listas para ti.
A veces el CSV no es un archivo: es texto pegado en un correo, devuelto por una API o escrito en una
prueba. io.StringIO envuelve un string para que se comporte como un archivo abierto, y read_csv no
nota la diferencia:
import io
df = pd.read_csv(io.StringIO(csv_text), parse_dates=["received_on"])
df.shape # (4, 5)
La primera línea se convierte en los nombres de columna. parse_dates le dice a pandas qué columnas
contienen fechas, para que sean datetimes reales en lugar de texto. Sin él, received_on volvería como
object, y ordenar o restar fechas no funcionaría.
Qué te dice dtypes
df.dtypes lista el tipo que pandas eligió para cada columna. En este albarán de entrega:
df.dtypes
# sku object
# product object
# units float64
# unit_cost float64
# received_on datetime64[ns]
El texto se guarda como object. Los números con decimales son float64, los números enteros son
int64 y las fechas interpretadas son datetime64[ns].
Por qué units pasó a float64
Todas las cantidades del archivo son números enteros, y aun así units es float64. La cantidad de la
manta está en blanco. pandas marca un valor que falta como NaN («not a number»), y NaN solo existe
como float, así que la columna entera se guarda como floats: 40 pasa a ser 40.0.
Verás lo mismo en los datos de la tienda. En employees, manager_id es float64, no int64, porque el
CEO no tiene jefe y esa celda es NaN. df.info() también lo muestra: el Non-Null Count de units es 3 de
4, lo que apunta directamente al hueco.
Errores comunes
- Pasar el propio texto a
read_csv. Sinio.StringIO, pandas trata el texto como un nombre de archivo y falla con unFileNotFoundError. - Olvidar
parse_dates, de modo que las fechas se quedan como texto. - Tratar como error una columna de id o de conteo
float64. Normalmente significa que hay al menos un valor que falta; encuéntralo con.info()antes de convertir.
¡Linterna encendida!
Practicaste: read csvstringiodtypesparse datesmissing values
- Resuelto
- Sin pistas
- Al primer intento
