Como leer un archivo txt en pyhton usando pandas

Publicado por: Antonio Serrano

Empecemos por explicar qué es pandas: pandas es una herramienta de manipulación y análisis de datos de código abierto rápida, potente, flexible y fácil de usar, construida sobre el lenguaje de programación Python.


Ahora vamos a describir los metodos que vamos a utilizar las cuales son: read_csv(), to_excel(), to_csv(), todo esto lo encontramos en la documentación oficial de pandas.

read_csvLee un archivo de valores separados por comas (csv) en DataFrame. También admite, opcionalmente, iterar o dividir el archivo en fragmentos, este método nos permite enviar diferentes parámetros, ahora solo vamos a explicar los que usaremos más adelante.

  • filepath_or_bufferstr: objeto de ruta u objeto similar a un archivo. Cualquier ruta de cadena válida es aceptable. La cadena podría ser una URL. Los esquemas de URL válidos incluyen http, ftp, s3, gs y archivo.

  • sepdefault ',': Delimitador a utilizar. Si sep es Ninguno, el motor C no puede detectar automáticamente el separador, pero el motor de análisis de Python sí puede, lo que significa que este último se usará y detectará automáticamente el separador mediante la herramienta rastreadora integrada de Python, csv.Sniffer.

  • headerint, list of int, None, default ‘infer’: Número(s) de fila para usar como nombres de columna y el inicio de los datos. El comportamiento predeterminado es deducir los nombres de las columnas: si no se pasan nombres, el comportamiento es idéntico a header=0y los nombres de las columnas se deducen de la primera línea del archivo.

Dataframe: El DataFrame es la estructura de datos fundamental de Pandas, representa una tabla de datos panel con indexación integrada. Cada columna contiene los valores de una variable y cada fila un conjunto de valores de cada columna. El dataframe tiene algunos métodos que nos permitir generar archivo con el contenido del mismo, los cuales son; 

to_excel: Escribir objeto en una hoja de Excel. Para escribir un solo objeto en un archivo .xlsx de Excel, solo es necesario especificar un nombre de archivo de destino. Para escribir en varias hojas, es necesario crear un objeto ExcelWriter con un nombre de archivo de destino y especificar una hoja en el archivo para escribir. Este método también puede recibir algunos parámetros, vamos a explicar solo el que usaremos más adelante.

  • excel_writer: Ruta del archivo o ExcelWriter existente, es un string, dónde podemos espcificar el nombre del archivo y ruta dónde se va a guardar el excel resultante.

to_csvEscriba el objeto en un archivo de valores separados por comas (csv). Al igual que to_excel a este método podemos enviar algunos paraḿetros, nuevamente solo vamos a explicar el que usaremos más adelante.

  • path_or_buf: String, objeto de ruta (que implementa os.PathLike[str]) u objeto similar a un archivo que implementa una función write().


Una vez conociendo lo anterior, vamos a iniciar con la explicación del código, este lo encuentras en mi reposositorio de github, usaremos un archivo txt de ejemplo que también se encuentra en el repositorio 


Importar la libreria de pandas y leer el archivo.

Leemos el archivo y le pasamos como primer parámetro la ruta del archivo, el segundo parámetro es el delimitador, para este caso es un tabulador por eso usamos \t, y como tercer parámetro un array con los nombres de las columnas.

import pandas as pd
# Leer el archivo de texto en pandas Dataframe y crear encabezados
print("Leyendo archivo") df = pd.read_csv("./files/example.txt", sep="\t", names=["Name", "Team", "Number", "Position", "Age", "Height", "Weight", "College", "Salary"])

El contenido del archivo lo guardamos en un DataFrame llamado df, si mandamos a imprimir esa dataframe obtendríamos lo siguiente:

pepe@thinkpad-t540p:~/www/personal/pandas/txt-to-excel$ python3 main.py 
Leyendo archivo
              Name                  Team  Number Position  Age Height  Weight            College      Salary
0    Avery Bradley        Boston Celtics       0       PG   25    6-2     180              Texas   7730337.0
1      Jae Crowder        Boston Celtics      99       SF   25    6-6     235          Marquette   6796117.0
2     John Holland        Boston Celtics      30       SG   27    6-5     205  Boston University         NaN
3      R.J. Hunter        Boston Celtics      28       SG   22    6-5     185      Georgia State   1148640.0
4    Jonas Jerebko        Boston Celtics       8       PF   29   6-10     231                NaN   5000000.0
..             ...                   ...     ...      ...  ...    ...     ...                ...         ...
94  Branden Dawson  Los Angeles Clippers      22       SF   23    6-6     225     Michigan State    525093.0
95      Jeff Green  Los Angeles Clippers       8       SF   29    6-9     235         Georgetown   9650000.0
96   Blake Griffin  Los Angeles Clippers      32       PF   27   6-10     251           Oklahoma  18907726.0
97  Wesley Johnson  Los Angeles Clippers      33       SF   28    6-7     215           Syracuse   1100602.0
98  DeAndre Jordan  Los Angeles Clippers       6        C   27   6-11     265          Texas A&M  19689000.0
[99 rows x 9 columns]


Generar el excel

Vamos a generar un excel utilizado el método to_excel propio de un Dataframe, para esto debemos pasar la rurta, yo lo guardaré en una carpeta llamada files creada previamente y el archivo excel llevara por nombre export.xlsx

# Exportar excel
print("Generando excel")
df.to_excel("./files/export.xlsx")


Generar csv

Para eso utilizaremos el método to_csv también propio de un Dataframe y le pasaremos la ruta dónde lo deseamos guardar, al igual que el el excel lo guardaré en un carpeta llamada files creada previamente y el archivo llevará por nombre export.csv

# Exportar csv
print("Generando csv")
df.to_csv("./files/export.csv")

Si en este momento ejecutamos el script obtendremos el siguiente resultado  en nuestra terminal

pepe@thinkpad-t540p:~/www/personal/pandas/txt-to-excel$ python3 main.py 
Leyendo archivo
Generando excel
Generando csv
pepe@thinkpad-t540p:~/www/personal/pandas/txt-to-excel$

Y los archivos se verían de la siguiente manera


Eliminar index

En la imagen anterior observamos una columna extra sin header en la cual nos muestra el número de registros, si no necesitamos esto deberemos pasar el parámeteo index=False en nuestro método to_excel o to_csv, generaremos otro archivo llamado export-without-index.xlsx para poder notar la diferencia.

# Exportar excel sin index
print("Genernado excel sin index")
df.to_excel("./files/export-without-index.xlsx", index=False)


Ejecutar el script

Ahora volvemos a ejecutar el script y obtendremos el siguiente resultado en nuestra terminal

pepe@thinkpad-t540p:~/www/personal/pandas/txt-to-excel$ python3 main.py 
Leyendo archivo
Generando excel
Generando csv
Genernado excel sin index
pepe@thinkpad-t540p:~/www/personal/pandas/txt-to-excel$

Y el resultado será un excel que se verá como el siguiente



Conclusiones

En este pequeños tutorial hemos visto un ejemplo básico de como leer un archivo text, guardar su contenido en un Dataframe y exportarlo a archivos excel y csv, si requieres algo especifico siempre puedes consultar la documentación oficial sobre Dataframe o dejar un comentario, solo tienes que registrarte y responderemos tu duda a la brevedad.

Compartir

0 Comentarios

0