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

Analytics Lane lanza la versión 1.3 del laboratorio con nuevas herramientas de evaluación de modelos y utilidades prácticas

Seguimos ampliando el laboratorio de Analytics Lane con el lanzamiento de la versión 1.3, disponible…

3 días ago

Augurios deportivos y portadas malditas, o cuando The Economist predice mejor al revés – El bestiario de los indicadores económicos absurdos (parte 3)

Cerramos la serie internacional con la categoría más estrambótica de todas: indicadores que predicen el…

4 días ago

El Binning en Credit Scoring: El Arte de Discretizar Variables

Si el WOE y el IV son la base matemática del credit scoring, el binning…

6 días ago

Analytics Lane lanza la versión 1.2 del laboratorio con nuevas herramientas de ajuste de curvas y cálculo matricial

Seguimos iterando sobre el laboratorio de Analytics Lane y lanzamos la versión 1.2, disponible en:https://www.analyticslane.com/lab/es…

1 semana ago

Cómo comparar tendencias con gráficos de líneas en Matplotlib: guía práctica paso a paso

Tienes los datos de tráfico web de los últimos cinco meses desglosados por canal: orgánico,…

2 semanas ago

This website uses cookies.