El análisis de datos usualmente comienza cargando datos en las estructuras de tu biblioteca/herramientas de elección. Casi siempre estos datos vendrán ya sea de una base de datos, la web, o una colección de archivos.
Los archivos que contienen tus datos pueden venir en muchos formatos diferentes: Valores separados por comas en un archivo de texto, archivos JSON, archivos de excel, o archivos con valores separados por caracteres personalizados. En este artículo, aprenderemos cómo leer datos de algunos de los formatos de archivo comunes usando las funciones integradas de Pandas.
¡Perfecto, comencemos!
Leyendo datos desde archivos CSV
Los archivos CSV son un formato de archivo increíblemente común, y muchos tutoriales y repositorios de archivos pequeños los usan como formato de datos por defecto. Imagina que tienes un archivo con este contenido en ./sample_data/pokes.csv:
Name,Type,Color,Evolves,HP
Abra,Psychic,Yellow,True,25
Pikachu,Electric,Yellow,True,35
Ekans,Poison,Purple,True,35
Dratini,Dragon,Blue,True,41
Ditto,Normal,Pink,False,48
Puedes fácilmente poner estos datos en un dataframe usando read_csv:
import pandas as pd
poke_data = pd.read_csv('./sample_data/pokes.csv')
poke_data
Name | Type | Color | Evolves | HP | |
---|---|---|---|---|---|
0 | Abra | Psychic | Yellow | True | 25 |
1 | Pikachu | Electric | Yellow | True | 35 |
2 | Ekans | Poison | Purple | True | 35 |
3 | Dratini | Dragon | Blue | True | 41 |
4 | Ditto | Normal | Pink | False | 48 |
Nota que read_csv automáticamente asigna la primera línea como índice de columna y añade su propio índice de fila por defecto. Puedes especificar qué columna usar como índice con el atributo index_col:
poke_data = pd.read_csv('./sample_data/pokes.csv', index_col='Name')
poke_data
Type | Color | Evolves | HP | |
---|---|---|---|---|
Name | ||||
Abra | Psychic | Yellow | True | 25 |
Pikachu | Electric | Yellow | True | 35 |
Ekans | Poison | Purple | True | 35 |
Dratini | Dragon | Blue | True | 41 |
Ditto | Normal | Pink | False | 48 |
A veces los archivos no tienen nombres de columna en la primera fila. En este caso, puedes proporcionar un parámetro adicional a read_csv para asignar nombres de columna:
poke_data = pd.read_csv('./sample_data/pokes_no_header.csv',
names=['Name', 'Type', 'Color', 'Evolves', 'HP'],
index_col='Name')
poke_data
Type | Color | Evolves | HP | |
---|---|---|---|---|
Name | ||||
Abra | Psychic | Yellow | True | 25 |
Pikachu | Electric | Yellow | True | 35 |
Ekans | Poison | Purple | True | 35 |
Dratini | Dragon | Blue | True | 41 |
Ditto | Normal | Pink | False | 48 |
Leyendo datos desde tablas
Pandas tiene una función llamada read_table
que te permite cargar archivos con datos en forma tabular. Esta función recibe un parámetro sep que especifica el carácter separador en la tabla. Imagina que tienes un archivo con el siguiente contenido:
Name|Type|Color|Evolves|HP
Abra|Psychic|Yellow|True|25
Pikachu|Electric|Yellow|True|35
Ekans|Poison|Purple|True|35
Dratini|Dragon|Blue|True|41
Ditto|Normal|Pink|False|48
Esta tabla usa el carácter ‘ | ’ como separador. Podemos cargar los datos en pandas con la siguiente llamada: |
poke_data = pd.read_table('./sample_data/pokes_table', sep='|')
poke_data
Name | Type | Color | Evolves | HP | |
---|---|---|---|---|---|
0 | Abra | Psychic | Yellow | True | 25 |
1 | Pikachu | Electric | Yellow | True | 35 |
2 | Ekans | Poison | Purple | True | 35 |
3 | Dratini | Dragon | Blue | True | 41 |
4 | Ditto | Normal | Pink | False | 48 |
# Puedes emular el comportamiento de read_csv pasando sep=',' como atributo:
poke_data = pd.read_table('./sample_data/pokes.csv', sep=',')
poke_data
Name | Type | Color | Evolves | HP | |
---|---|---|---|---|---|
0 | Abra | Psychic | Yellow | True | 25 |
1 | Pikachu | Electric | Yellow | True | 35 |
2 | Ekans | Poison | Purple | True | 35 |
3 | Dratini | Dragon | Blue | True | 41 |
4 | Ditto | Normal | Pink | False | 48 |
pd.read_table es muy útil si tienes un archivo con entradas que están separadas por un número variable de espacios o tabs. Pasando la expresión regular sep=’\s+’ podrás cargar tales archivos. Carguemos un archivo con el siguiente contenido:
Name Type Color Evolves HP
Abra Psychic Yellow True 25
Pikachu Electric Yellow True 35
Ekans Poison Purple True 35
Dratini Dragon Blue True 41
Ditto Normal Pink False 48
poke_data = pd.read_table('./sample_data/pokes_varspace', sep='\s+')
poke_data
Name | Type | Color | Evolves | HP | |
---|---|---|---|---|---|
0 | Abra | Psychic | Yellow | True | 25 |
1 | Pikachu | Electric | Yellow | True | 35 |
2 | Ekans | Poison | Purple | True | 35 |
3 | Dratini | Dragon | Blue | True | 41 |
4 | Ditto | Normal | Pink | False | 48 |
Leyendo otros formatos
Los otros dos formatos comunes que probablemente encontrarás en la práctica son archivos tipo Excel y archivos JSON. Pandas tiene las funciones read_excel y read_json para ayudarte cuando trabajas con esos archivos. Puedes leer la documentación oficial aquí:
Los archivos no son todo, pero es un gran comienzo
Aunque las bases de datos son probablemente la forma más común de almacenamiento de datos con la que lidiarás, saber cómo leer datos desde archivos es una habilidad fundamental cuando trabajas con Pandas. Muchos repositorios en línea y tutoriales ofrecen enormes bibliotecas de datos en varios formatos de archivo diferentes.
Con el material cubierto en este artículo, y con acceso a la excelente documentación de Pandas no tendrás problema trabajando con archivos.
Ahora que podemos obtener los datos en dataframes, el siguiente paso es aprender cómo limpiarlos. En el próximo artículo, aprenderemos algunas técnicas para preparar datos para procesamiento.
¡Gracias por leer!
Qué hacer después
- Comparte este artículo con amigos y colegas. Gracias por ayudarme a llegar a personas que podrían encontrar útil esta información.
- Puedes encontrar el código fuente para esta serie en este repositorio.
- Este artículo está basado en el libro: Python for Data Analysis.
- Envíame un email con preguntas, comentarios o sugerencias (está en la [página Autor](/about