Python

Guardar y leer archivos CSV con Python

Uno de los formatos más utilizados en la actualidad para intercambio de datos es CSV (“Comma Separated Values”). Estas son básicamente archivos de texto en los que cada línea contiene una fila de datos con múltiples registros delimitados por un separador. Tradicionalmente el separador suele ser la coma, de ahí el nombre del formato. Aunque también se pueden utilizan otros caracteres que no suelen estar contenidos en los datos. Por ejemplo, espacios, tabuladores y puntos y coma. Lo que los hace muy fáciles de procesar y son soportados por cualquier aplicación. Incluso son fáciles de leer por personas con editores de texto. Por eso es clave saber guardar y leer archivos CVS con Python.

Guardado de archivos CSV

Para guardar un archivo CSV es necesario disponer en primer lugar de un dataframe en memoria. Por lo que se pude crear uno de ejemplo. Una vez generado el este se puede volcar a un archivo CSV utilizando el método to_csv.

import pandas as pd

data = {'first_name': ['Sigrid', 'Joe', 'Theodoric','Kennedy', 'Beatrix', 'Olimpia', 'Grange', 'Sallee'],
        'last_name': ['Mannock', 'Hinners', 'Rivers', 'Donnell', 'Parlett', 'Guenther', 'Douce', 'Johnstone'],
        'age': [27, 31, 36, 53, 48, 36, 40, 34],
        'amount_1': [7.17, 1.90, 1.11, 1.41, 6.69, 4.62, 1.01, 4.88],
        'amount_2': [8.06,  "?", 5.90,  "?",  "?", 7.48, 4.37,  "?"]}

df = pd.DataFrame(data, columns = ['first_name', 'last_name', 'age', 'amount_1', 'amount_2'])

df.to_csv('example.csv')

En caso de que se desee cambiar el delimitador se puede indicar con la propiedad sep. Para que este sea punto y coma simplemente se ha de escribir:

df.to_csv('example_semicolon.csv', sep=';')

Lectura de archivos CSV

La lectura de los archivos se realiza con el método read_csv de pandas. Solamente se la ha de indicar la ruta al archivo.

df = pd.read_csv('example.csv')
df
     Unnamed first_name  last_name   age amount_1    amount_2
0 0 Sigrid Mannock 27 7.17 8.06
1 1 Joe Hinners 31 1.90 ?
2 2 Theodoric Rivers 36 1.11 5.9
3 3 Kennedy Donnell 53 1.41 ?
4 4 Beatrix Parlett 48 6.69 ?
5 5 Olimpia Guenther 36 4.62 7.48
6 6 Grange Douce 40 1.01 4.37
7 7 Sallee Johnstone 34 4.88 ?

Al igual que antes se puede indicar el separador utilizado mediante la propiedad sep.

df = pd.read_csv('example_semicolon.csv', sep=';')

Por defecto se utiliza la primera línea del fichero como cabecera para asignar los nombres a las columnas. En el caso de que el archivo no disponga de cabecera se puede evitar esto asignando None a la propiedad head.

df = pd.read_csv('example.csv', header=None)
df
 0 1  2  3 4  5
0 NaN first_name last_name age amount_1 amount_2
1 0.0 Sigrid  Mannock  27 7.17  8.06
2 1.0 Joe  Hinners  31 1.9  ?
3 2.0 Theodoric Rivers  36 1.11  5.9
4 3.0 Kennedy  Donnell  53 1.41  ?
5 4.0 Beatrix  Parlett  48 6.69  ?
6 5.0 Olimpia  Guenther 36 4.62  7.48
7 6.0 Grange  Douce  40 1.01  4.37
8 7.0 Sallee  Johnstone 34 4.88  ?

El archivo que se ha utilizado en esta ocasión tiene cabecera, por lo que esta se ha cargado como la primera fila. En caso de que se desee ignorar una o más filas se le puede indicar medítate la propiedad skiprows.

df = pd.read_csv('example.csv', header=None, skiprows=1)
df
 0 1  2  3 4 5
0 0 Sigrid  Mannock  27 7.17 8.06
1 1 Joe  Hinners  31 1.90 ?
2 2 Theodoric Rivers  36 1.11 5.9
3 3 Kennedy  Donnell  53 1.41 ?
4 4 Beatrix  Parlett  48 6.69 ?
5 5 Olimpia  Guenther 36 4.62 7.48
6 6 Grange  Douce  40 1.01 4.37
7 7 Sallee  Johnstone 34 4.88 ?

Los nombres de las columnas del dataframe se pueden indicar mediante la propiedad names.

df = pd.read_csv('example.csv',
                 skiprows = 1,
                 names=['UID', 'First Name', 'Last Name', 'Age', 'Sales #1', 'Sales #2'])
df
 UID First Name Last Name Age Sales #1 Sales #2
0 0 Sigrid  Mannock  27 7.17  8.06
1 1 Joe  Hinners  31 1.90  ?
2 2 Theodoric Rivers  36 1.11  5.9
3 3 Kennedy  Donnell  53 1.41  ?
4 4 Beatrix  Parlett  48 6.69  ?
5 5 Olimpia  Guenther 36 4.62  7.48
6 6 Grange  Douce  40 1.01  4.37
7 7 Sallee  Johnstone 34 4.88  ?

Es posible que los archivos contengan valores nulos. En el ejemplo se puede ver que este es ?. La propiedad que permite que se asigne un valor nulo cuando se encuentra un valor dado es na_values=['.']

df = pd.read_csv('example.csv',
                 skiprows=1,
                 names=['UID', 'First Name', 'Last Name', 'Age', 'Sales #1', 'Sales #2'],
                 na_values=['?'])
df
 UID First Name Last Name Age Sales #1 Sales #2
0 0 Sigrid  Mannock  27 7.17  8.06
1 1 Joe  Hinners  31 1.90  NaN
2 2 Theodoric Rivers  36 1.11  5.9
3 3 Kennedy  Donnell  53 1.41  NaN
4 4 Beatrix  Parlett  48 6.69  NaN
5 5 Olimpia  Guenther 36 4.62  7.48
6 6 Grange  Douce  40 1.01  4.37
7 7 Sallee  Johnstone 34 4.88  NaN

Finalmente se puede asignar un ídice a los datos

df = pd.read_csv('example.csv',
                 skiprows=1,
                 names=['UID', 'First Name', 'Last Name', 'Age', 'Sales #1', 'Sales #2'],
                 na_values=['?'],
                 index_col='UID')
df
 First Name Last Name Age Sales #1 Sales #2
UID     
0 Sigrid  Mannock  27 7.17  8.06
1 Joe  Hinners  31 1.90  NaN
2 Theodoric Rivers  36 1.11  5.90
3 Kennedy  Donnell  53 1.41  NaN
4 Beatrix  Parlett  48 6.69  NaN
5 Olimpia  Guenther 36 4.62  7.48
6 Grange  Douce  40 1.01  4.37
7 Sallee  Johnstone 34 4.88  NaN

O más de uno

df = pd.read_csv('example.csv',
                 skiprows=1,
                 names=['UID', 'First Name', 'Last Name', 'Age', 'Sales #1', 'Sales #2'],
                 na_values=['?'],
                 index_col=['First Name', 'Last Name'])

Conclusiones

En esta entrada se ha explicado cómo guardar y leer archivos CSV en Python. Conocer los métodos de pandas que permiten realizar esta tarea con es clave para poder trabajar con estos archivos tan populares.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: Pandas

Recent Posts

Pareto/NBD: cuando el abandono silencioso cambia el CLV

En el artículo del Dashboard vimos que Pareto/NBD aparecía junto a BG/NBD con un ajuste…

1 día ago

Por qué migrar tus proyectos TypeScript a ES Modules en 2026

Durante años, CommonJS (require/module.exports) ha sido la forma por defecto de organizar módulos en Node.js,…

6 días ago

Método del codo: interpretación correcta y limitaciones

Cuando usas k-means tienes que decidir algo incómodo de entrada: cuántos grupos, , vas a…

1 semana ago

Errores comunes al interpretar resultados estadísticos

La estadística no suele fallar en los cálculos: falla en la interpretación. El test está…

2 semanas ago

Dashboard CLV: cuatro modelos, un mismo dataset, conclusiones muy distintas

Los artículos anteriores de esta serie cubrieron cuatro formas de mirar el valor del cliente:…

2 semanas ago

Curiosidad: Por qué la criptografía habla siempre de Alice y Bob

Quien se acerca a la criptografía descubre enseguida a dos personajes que aparecen en casi…

3 semanas ago

This website uses cookies.