Leer y escribir archivos CSV con Pandas

Estándar

El formato CSV (Comma Separated Values) es un método muy extendido y simple para compartir datos. Son archivos
de texto que contienen una tabla de datos, en las que cada línea es una fila y en cada fila, cada valor se asigna a una columna
mediante un separador.

Los separadores deben se caracteres que no aparezcan en los datos, por ejemplo, una coma
(el separador más usado, de ahí el nombre de CSV), un espacio en blanco o un punto y coma (usado por defecto en los CSV de Excel).
Los archivos CSV tienen la ventaja de ser muy fáciles de procesar; incluso podemos abrirlo con un editor de texto e interpretar los valores.
La desventaja es que no son tan eficientes en cuanto a tamaño de archivo o velocidad de procesado como los formatos binarios.

Python tiene métodos para manejar archivos CSV, pero en esta entrada, nos centraremos en Pandas.
Cuando comencé a trabajar con archivos CSV y Pandas, cometí el error de abrirlos con las funciones estándar de Python,
procesarlos manualmente y generar los objetos DataFrame. Esto complica todo innecesariamente,
ya que Pandas cumple este caso por defecto.

Se nos ofrece dos funciones para tratar los archivos CSV: pandas.read_csv() para cargar los contenidos
del archivo CSV en un DataFrame, y DataFrame.to_csv() para volcar el contenido
de un DataFrame a un archivo CSV.

Supongamos que tenemos un archivo CSV con los siguientes contenidos:

X,Sine,Cosine,Tangent
-3.14,0.0,-1.0,0.0
-2.36,-0.7,-0.71,0.99
-1.57,-1.0,0.0,-1255.77
-0.79,-0.71,0.7,-1.01
0.0,0.0,1.0,0.0
0.79,0.71,0.7,1.01
1.57,1.0,0.0,1255.77
2.36,0.7,-0.71,-0.99
3.14,0.0,-1.0,0.0

Para cargarlo, debemos usar pandas.read_csv():

>>> import pandas as pd
>>> trigonometric = pd.read_csv('trig.csv', index_col='X')
>>> print(trigonometric)

       Sine  Cosine  Tangent
X                           
-3.14  0.00   -1.00     0.00
-2.36 -0.70   -0.71     0.99
-1.57 -1.00    0.00 -1255.77
-0.79 -0.71    0.70    -1.01
 0.00  0.00    1.00     0.00
 0.79  0.71    0.70     1.01
 1.57  1.00    0.00  1255.77
 2.36  0.70   -0.71    -0.99
 3.14  0.00   -1.00     0.00

Hemos indicado explícitamente que la primera columna (titulada X) es el índice.
Por defecto, Pandas usa la primera línea del archivo para nombrar las columnas, y crea un índice con los números de línea.
Para cambiar este comportamiento, se deben modificar los
argumentos de
pandas.read_csv().

Una vez cargados los datos, podemos manipularlos, utilizarlos para realizar cálculos, etc ...

>>> print(trigonometric.mean())
Sine      -2.467162e-17
Cosine    -1.133333e-01
Tangent    1.011537e-15
dtype: float64
>>> trigonometric.loc[:,'Sine2'] = trigonometric.loc[:,'Sine'].apply(lambda x: np.power(x,2))
>>> trigonometric.loc[:,'Cosine2'] = trigonometric.loc[:,'Cosine'].apply(lambda x: np.power(x,2))
>>> trigonometric.loc[:,'Tangent2'] = trigonometric.loc[:,'Tangent'].apply(lambda x: np.power(x,2))
>>> print(trigonometric)
       Sine  Cosine  Tangent   Sine2  Cosine2      Tangent2
X                                                          
-3.14  0.00   -1.00     0.00  0.0000   1.0000        0.0000
-2.36 -0.70   -0.71     0.99  0.4900   0.5041        0.9801
-1.57 -1.00    0.00 -1255.77  1.0000   0.0000  1576958.2929
-0.79 -0.71    0.70    -1.01  0.5041   0.4900        1.0201
 0.00  0.00    1.00     0.00  0.0000   1.0000        0.0000
 0.79  0.71    0.70     1.01  0.5041   0.4900        1.0201
 1.57  1.00    0.00  1255.77  1.0000   0.0000  1576958.2929
 2.36  0.70   -0.71    -0.99  0.4900   0.5041        0.9801
 3.14  0.00   -1.00     0.00  0.0000   1.0000        0.0000

En este ejemplo, hemos calculado el promedio de cada columna, y después, hemos añadido tres columnas nuevas
que son los cuadrados de las columnas originales. Para ello, hemos usado el método DataFrame.apply()
para aplicar una función lambda que contiene
una llamada a numpy.power(). Finalmente, podemos guardar los resultados en un archivo CSV nuevo:

>>> trigonometric.to_csv('trig2.csv')

El método pandas.to_csv() tiene también muchos argumentos ajustables, que pueden verse en la
documentación.
Pandas guardará por defecto el índice como la primera columna. La primera fila del archivo contendrá los títulos de las columnas y del índice (si se ha establecido una etiqueta para el mismo).

Pandas a soporte también a otros tipos de archivo (XLS, pickle, etc ...), pero en tratamiento de datos, el formato CSV es el más utilizado,
dada su facilidad de uso y el amplio soporte por parte de muchas plataformas y aplicaciones.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *