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

Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

En la era del dato, las organizaciones se enfrentan al reto de gestionar volúmenes masivos…

2 días ago

Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)

En la serie Creación de una API REST con Express y TypeScript construimos una API…

4 días ago

Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte

Durante la Segunda Guerra Mundial, la Fuerza Aérea de Estados Unidos quería reforzar sus aviones…

1 semana ago

Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows

En muchas situaciones —ya sea para grabar un tutorial, tomar capturas de pantalla profesionales, probar…

2 semanas ago

La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento

Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…

2 semanas ago

Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)

En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…

3 semanas ago

This website uses cookies.