Importe múltiples archivos CSV en Pandas y concatene en un marco de datos
- que es pandas
-
Cómo leer un solo archivo
.csv
usando Pandas - Leer múltiples archivos CSV en Python
- Concatenar múltiples marcos de datos en Python
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)