Importe múltiples archivos CSV en Pandas y concatene en un marco de datos

Preet Sanghavi 10 octubre 2023
  1. que es pandas
  2. Cómo leer un solo archivo .csv usando Pandas
  3. Leer múltiples archivos CSV en Python
  4. Concatenar múltiples marcos de datos en Python
Importe múltiples archivos CSV en Pandas y concatene en un marco de datos

Este tutorial trata sobre cómo leer múltiples archivos .csv y concatenar todos los DataFrames en uno.

Este tutorial usará Pandas para leer los archivos de datos y crear y combinar los marcos de datos.

que es pandas

Este paquete viene con una amplia gama de funciones para leer una variedad de archivos de datos, así como para realizar técnicas de manipulación de datos.

Para instalar el paquete pandas en su máquina, debe abrir el Símbolo del sistema/Terminal y ejecutar pip install pandas.

Cómo leer un solo archivo .csv usando Pandas

El paquete pandas proporciona una función para leer un archivo .csv.

>>> import pandas as pd
>>> df = pd.read_csv(filepath_or_buffer)

Dada la ruta del archivo, la función pandas read_csv() leerá el archivo de datos y devolverá el objeto.

>>> type(df)
<class 'pandas.core.frame.DataFrame'>

Leer múltiples archivos CSV en Python

No hay una función explícita para realizar esta tarea usando solo el módulo pandas. Sin embargo, podemos idear un método racional para realizar lo siguiente.

En primer lugar, necesitamos tener la ruta de todos los archivos de datos. Será fácil si todos los archivos están situados en una carpeta en particular.

Crear una lista donde se almacenarán todas las rutas y nombres de los archivos.

>>> import pandas as pd
>>> import glob
>>> import os
>>> # This is a raw string containing the path of files
>>> path = r'D:\csv files'
>>> all_files = glob.glob(os.path.join(path, '*.csv'))
>>> all_files
['D:\\csv files\\FILE_1.csv', 'D:\\csv files\\FILE_2.csv']

En el código anterior, se crea una lista que contiene la ruta del archivo.

Módulo glob

Use el módulo glob para encontrar archivos o nombres de ruta que coincidan con un patrón. El glob sigue las reglas de expansión de ruta estándar de Unix para coincidir con los patrones.

No es necesario instalar este módulo externamente porque ya está incluido con Python. Sin embargo, si no tiene este paquete, escriba pip install glob2, y debería estar listo para comenzar.

Para recuperar rutas recursivamente desde directorios/archivos y subdirectorios/subarchivos, podemos utilizar las funciones del módulo glob glob.glob() y glob.iglob().

Sintaxis:

glob.glob(pathname, *, recursive=False)
glob.iglob(pathname, *, recursive=False)

La función devolverá una lista que contiene las rutas de todos los archivos.

Por ejemplo, para recuperar todos los nombres de archivo de una ruta dada, use el símbolo de asterisco * al final de la ruta, pasándolo como una cadena a la función glob.glob('').

>>> for files in glob.glob(r'D:\csv files\*'):
	    print(files)

D:\csv files\FILE_1.csv
D:\csv files\FILE_2.csv
D:\csv files\textFile1.txt
D:\csv files\textFile2.txt

Además, especifique la extensión del archivo después del símbolo de asterisco para realizar una búsqueda más enfocada.

>>> for files in glob.glob(r'D:\csv files\*.csv'):
	    print(files)

D:\csv files\FILE_1.csv
D:\csv files\FILE_2.csv

¿Qué son las cadenas en bruto?

En Python, una cadena sin formato se forma agregando r o R a una cadena literal. La barra invertida (\) es un carácter literal en la cadena sin procesar de Python.

Esto es útil cuando queremos una cadena con una barra invertida pero no queremos que se considere un carácter de escape.

Por ejemplo:

Para representar caracteres especiales como tabulaciones y saltos de línea, usamos la barra invertida (\) para indicar el inicio de una secuencia de escape.

>>> print("This\tis\nnormal\tstring")
This	is
normal	string

Sin embargo, las cadenas sin formato tratan la barra invertida (\) como un carácter literal. Por ejemplo:

>>> print(r"This\tis\nnormal\tstring")
This\tis\nnormal\tstring

Módulo os

El módulo os de Python contiene métodos para tratar con el sistema operativo. os está incluido en los módulos de utilidad básicos para Python.

Este módulo ofrece un método portátil de usar la funcionalidad que depende del sistema operativo. El módulo os.path de Python, un submódulo del módulo os, se utiliza para manipular nombres de rutas comunes.

La función os.path.join() de Python une de forma inteligente uno o más componentes de la ruta. Excepto por el último componente de ruta, este enfoque concatena diferentes componentes de ruta colocando exactamente un separador de directorio ("/") después de cada parte no vacía.

Se agrega un separador de directorio ("/") al final del componente de la ruta final que se va a vincular está vacío.

Todos los componentes conectados anteriormente se eliminan si un componente de la ruta representa una ruta absoluta y la unión pasa al componente que representa la ruta absoluta.

Sintaxis:

os.path.join(path, *path)

Para fusionar diferentes componentes de ruta, use la función os.path.join().

import os

path = "Users"
os.path.join(path, "Desktop", "data.csv")

Producción :

'Users\\Desktop\\data.csv'

Concatenar múltiples marcos de datos en Python

Avanzando más, use las rutas devueltas por la función glob.glob() para extraer datos y crear marcos de datos. Posteriormente, también agregaremos los objetos del dataframe de Pandas a la lista.

Código:

dataframes = list()

for dfs in all_files:
    data = pd.read_csv(dfs)
    dataframes.append(data)

Se crea una lista de tramas de datos.

>>> dataframes
[dataframe1, dataframe2]

Concatenación de tramas de datos.

Nota: Antes de concatenar los marcos de datos, todos los marcos de datos deben tener columnas similares.

pd.concat(dataframes, ignore_index=True)

El método pandas.concat() maneja todas las operaciones de concatenación intensiva junto con un eje de objeto de Pandas, con operaciones lógicas establecidas (unión o intersección) de los índices en el otro eje como un extra opcional.

Código completo:

# importing the required modules
import pandas as pd
import os
import glob

# Path of the files
path = r"D:\csv files"

# joining the path and creating list of paths
all_files = glob.glob(os.path.join(path, "*.csv"))

dataframes = list()

# reading the data and appending the dataframe
for dfs in all_files:
    data = pd.read_csv(dfs)
    dataframes.append(data)

# Concatenating the dataframes
df = pd.concat(dataframes, ignore_index=True)
Preet Sanghavi avatar Preet Sanghavi avatar

Preet writes his thoughts about programming in a simplified manner to help others learn better. With thorough research, his articles offer descriptive and easy to understand solutions.

LinkedIn GitHub

Artículo relacionado - Python CSV