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

Errores habituales al trabajar con DataFrames grandes en Pandas (y cómo evitarlos)

Hay un momento muy concreto en la vida de casi todo análisis: el código que…

1 día ago

Champion vs Challenger: Cómo los Bancos Validan Modelos Nuevos antes de Ponerlos en Producción

Has construido un nuevo modelo de credit scoring. Las métricas de validación son mejores que…

3 días ago

Cómo Comparar Dos Hipotecas con Todos los Gastos Incluidos

Comparar dos hipotecas parece sencillo: la que tenga el TIN más bajo es la mejor…

1 semana ago

Segmentación RFM: cómo clasificar tu cartera de clientes antes de calcular el CLV

En un artículo anterior vimos la fórmula clásica del CLV junto a sus limitaciones. Una…

1 semana ago

Los récords con asterisco, o la épica del titular sin contexto – El bestiario de los indicadores económicos absurdos (parte 8 y final)

Y llegamos al final de una serie que había programado para ser de tres entradas.…

2 semanas ago

PSI: Cómo Saber Cuándo tu Modelo de Credit Scoring se ha Degradado

Un modelo de credit scoring no es un artefacto estático. Se construye en un momento…

2 semanas ago

This website uses cookies.